3

LINQを使用して、他のテーブルに存在しない行を表示しようとしています。誰かが私を助けることができますか?

これが使用しているSQLIMです。

select * from table1 
left join table2
on 
table1.col1 = table2.col1 
and 
table1.col2 = table2.col2
where
table2.col1 is null and table2.col2 is null

すでにいくつかの解決策を検索して見つけました。これが私がこれまでにしたことです。

from t1 in table1
where 
!(from t2 in table1
  join t3 in table2 on
  new { t2.col1, t2.col2 } 
  equals 
  new { t3.col1, t3.col2 }
  select t2.PK).Contains(t1.PK)
  select t1

上記のコードはうまく機能しますが、それが私が使用できる唯一の解決策であるかどうか疑問に思っていますか?つまり、JOINおよびCONTAINSメソッドを使用する代わりに、where句を使用してleft join linqを直接使用することはできませんか?

4

1 に答える 1

9

さて、あなたはこのようなことをすることができます:

var query = from t1 in table1
            join t2 in table2
            on new { t1.col1, t2.col2} equals { t2.col1, t2.col2 }
            into groups
            where !groups.Any()
            select t1;

これは、「現在」に一致するgroups行のセットです。グループがない場合は空になります。これはまさにあなたが望むものです。シーケンスが空かどうかを確認する最も簡単な方法は、メソッドを使用することです。t2t1Any

于 2010-11-17T07:02:46.767 に答える