1

したがってIQueryable<Array>、共通の文字列型を持つ 2 つのクエリがあります。2 番目のクエリを使用して、最初のクエリの結果として見つからないレコードのみを残して、最初の共通の型を使用してすべてのレコードを削除したいと考えています。それを行う方法がよくわかりません。

4

1 に答える 1

2

これを行う最も理解しやすい方法は、以下を使用してListAのアイテムを除外することWhere()です。

IQueryable<LISTA> as = db.ListA.Where(x => x.Active);
IQueryable<LISTB> bs = db.ListB.Where(x => x.HadReview);
as = as.Where(a => bs.Any(b => a.LogginID == b.LogginID) == false);

より効率的な方法は、グループ参加を使用することです。

var as = from a in db.ListA.Where(x => x.Active)
         join b in db.ListB.Where(x => x.HadReview) 
             on a.LogginID equals b.LogginID into bs
         where bs.Any() == false
         select a;

編集: 2つの異なるDataContextがある場合、上記は機能しません。これは次のようになります。

IQueryable<LISTA> as = db1.ListA.Where(x => x.Active);
IQueryable<LISTB> bs = db2.ListB.Where(x => x.HadReview);
as = as.Where(a => bs.Select(b => b.LogginID).Contains(a.LogginID) == false);

参照:Linq to SQL-異なるデータコンテキストからテーブルを内部結合する方法は?

于 2012-11-25T03:00:59.363 に答える