5

EF を使用して 3 つのテーブルを結合しようとしていますが、次のエラーがスローされます

consider swaping conditions on either side of equals

誰か助けてくれませんか

 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;
4

2 に答える 2

14

コンパイラ エラーは非常に正しいです:-

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

参加しているテーブルは左側にある必要があり、参加しているテーブルは右側にある必要があります。したがって: -

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;

なぜだろうと思っているのであれば、それはクエリ構文が基礎となる拡張メソッドの構文糖衣に過ぎないからです:-

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);

元の実装は次のように拡張されます:-

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);
于 2012-10-30T15:12:20.797 に答える
0

結合するテーブルのプロパティは、equalsの右側にある必要があります

スイッチ

から: on billtender.OrderID equals billtotal.OrderID

に: on billtotal.OrderID equals billtender.OrderID

于 2012-10-30T15:08:08.127 に答える