J’ai les objects suivants dans une hiérarchie A > B > C > D
Chaque object est associé à une table. J’essaie d’écrire le code SQL suivant à l’aide de QueryOver:
SELECT B FROM A, B, C, D WHERE A.ID = B.ID AND B.ID = C.ID AND C.ID = D.ID WHERE A.NUMBER = 'VALUE' AND D.NAME IN ('VALUE1', 'VALUE2')
J’ai le code C # jusqu’à présent:
ssortingng[] entityNames = entityAtsortingbutes.Select(e => e.Name).ToArray(); ssortingng customerNumber = 2; return session.QueryOver() .JoinQueryOver(b => bC) .JoinQueryOver(c => cD) .WhereRessortingctionOn(d => d.Name).IsIn(entityNames) .List();
Ce qui manque ici, c’est le lien A > B
Je n’arrive pas à comprendre comment append la jointure à A
limitant dans le champ NUMBER
. J’ai essayé ce qui suit mais le .JoinQueryOver(b => bC)
recherche le type A
au lieu de rechercher le type B
return session.QueryOver() .JoinQueryOver(b => bA) .Where(a => a.Number == customerNumber) .JoinQueryOver(b => bC) **//Looks for type A instead of B** .JoinQueryOver(c => cD) .WhereRessortingctionOn(d => d.Name).IsIn(entityNames) .List();
Comment puis-je append le type A
à cette requête tout en renvoyant le type B
?
vous pouvez utiliser des alias pour rejoindre votre table comme
B tB = null; A tA = null; C tC = null; D tD = null; var qOver = HibSession.QueryOver(() => tB) .JoinAlias(() => tB.A, () => tA, JoinType.LeftOuterJoin) .Where(() => tA.Number == customerNumber) .JoinAlias(() => tB.C, () => tC, JoinType.LeftOuterJoin) .JoinAlias(() => tC.D, () => tD, JoinType.LeftOuterJoin) .Where(Ressortingctions.On(() => tD.Name).IsIn(entityNames)) .List();
J’espère que c’est utile.