1

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

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

一种可能更有效的方法是使用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 - 如何从不同的数据上下文内部连接表?

于 2012-11-25T03:00:59.363 回答