Joindre plusieurs tables à l’aide d’Entity Framework

J’essaie de joindre 3 tables en utilisant EF, mais une erreur est générée

consider swaping conditions on either side of equals 

quelqu’un peut-il aider

  var billdata = from billtotal in context.billTotals join billcard in context.billClubcards on billtotal.OrderID equals billcard.OrderID join billtender in context.billTenders on billtender.OrderID equals billtotal.OrderID select billtotal; 

L’erreur du compilateur est tout à fait correcte: –

The name 'billtender' is not in scope on the left side of 'equals'. Consider swapping the expressions on either side of 'equals'.

La table à partir de laquelle vous vous inscrivez doit être à gauche, celle à laquelle vous vous joignez doit être à droite. Par conséquent:-

 var billData = from billtotal in context.billTotals join billcard in context.billClubcards on billtotal.OrderId equals billcard.OrderId join billtender in context.billTenders on billtotal.OrderId equals billtender.OrderId select billtotal; 

Si vous vous demandez pourquoi, c’est parce que la syntaxe de la requête est simplement un sucre syntaxique pour la méthode d’extension sous-jacente: –

 context.billTotals .Join( context.billClubcards, billtotal => billtotal.OrderId, billclubcard => billclubcard.OrderId, (billtotal, billclubcard) => billtotal) .Join( context.billTenders, billtotal => billtotal.OrderId, billtender => billtender.OrderId, (billtotal, billtender) => billtotal); 

Votre implémentation initiale serait étendue à: –

 context.billTotals .Join( context.billClubcards, billtotal => billtotal.OrderId, billclubcard => billclubcard.OrderId, (billtotal, billclubcard) => billtotal) .Join( context.billTenders, billtotal => billtender.OrderId, // billtender isn't in scope! billtender => billtotal.OrderId, // billtotal isn't in scope! (billtotal, billtender) => billtotal); 

La propriété de la table à laquelle vous vous joignez doit être du côté droit d’égal à égal

commutateur

à partir de: on billtender.OrderID equals billtotal.OrderID

to: on billtotal.OrderID equals billtender.OrderID