1

結合を使用して linq to sql ステートメントを作成しています。検索すると、以下のリンクにたどり着きました: LINQ to SQL の内部結合の構文は何ですか? この質問では、答えは次のようになります。

var dealercontacts = from contact in DealerContact
                     join dealer in Dealer on contact.DealerId equals dealer.ID
                     select contact;

このステートメントでは、内部結合は単一の比較ステートメントで使用されています。つまりon contact.DealerId equals dealer.ID、実行しようとするとon contact.DealerId equals dealer.ID && contact.Branch equals dealer.Branch、2番目の比較ステートメントを受け入れません。どうすればこれを手に入れることができますか?

4

5 に答える 5

4

あなたのモデルは、エンティティ レベルで実際の関連付けを持っていませんか?

つまり、ID だけを処理するのではなくDealerContact、関連付けられたものを表すプロパティを持つことです。Dealer

その結合を手動で指定する必要さえないでしょう。どうですか:

var dealercontacts = from contact in DealerContact
                     where contact.Branch equals contact.Dealer.Branch
                     select contact;
于 2012-11-05T06:41:44.413 に答える
2

Linq to SQL での複数の列の結合は少し異なります。

var query =
    from t1 in myTABLE1List // List<TABLE_1>
    join t2 in myTABLE1List
      on new { t1.ColumnA, t1.ColumnB } equals new { t2.ColumnA, t2.ColumnB }
于 2012-11-05T06:34:57.037 に答える
2

Linq から Sql への結合は、ベロコードによって複数の条件で実現できます。

var q = (from l1 in lst
         join l2 in lst1 on new { prop1 = l1.Property1, prop2 = l1.Property2 } 
          equals new { prop1 = l2.Property1, prop2 = l2.Property2 }
                     select l1); 

プロパティにエイリアスを与えることをお勧めします (prop1 = l1.Property1 のように、"prop1" は Property1 のエイリアスです)。これは、異なるプロパティ名を持つプロパティに参加することがあり、コンパイル時にエラーが発生することがあるためです。

また、プロパティへの結合が int と int のように同じ型であることを確認してください。同じではありません。

于 2012-11-06T14:49:11.997 に答える
1

2 つのキーの間の匿名オブジェクトIdを作成する必要があります。BranchEqualityComparer

linq 構文アプローチ:

  var dealercontacts = from contact in contacts
                             join dealer in dealers 
                             on new { Id = contact.DealerId, contact.Branch }
                             equals new { Id = dealer.ID, dealer.Branch }
                             select contact;

ラムダアプローチ:

  var dealercontacts = contacts.Join(dealers, 
                      contact => new { Id = contact.DealerId, contact.Branch },
                      dealer => new { Id = dealer.ID, dealer.Branch },
                      (contact, dealer) => contact);
于 2012-11-05T06:41:30.480 に答える
1

ここから答えが得られると思います

リンクからコピペ

var query = from s in context.ShoppingMalls
        join h in context.Houses
        on
        new { s.CouncilCode, s.PostCode }
        equals
         new { h.CouncilCode, h.PostCode }
        select s;
于 2012-11-05T06:35:30.237 に答える