根据在另一个查询中找到的相同值从1个查询中删除记录

时间:2012-11-25 01:55:36

标签: c# linq

所以我有2个IQueryable<Array>查询,使用常见的字符串类型;我想使用第二个查询在第一个查询中使用公共类型删除所有记录,只留下未找到的记录作为第一个查询的结果。不太清楚该怎么做。

1 个答案:

答案 0 :(得分:1)

最容易理解的方法是使用Where()过滤掉ListA中的项目:

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

可能更有效的方法是使用Group Join

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;

编辑:如果您有两个不同的DataContexts,则上述操作无效。这可能:

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 - How to inner join tables from different Data Context?