【发布时间】:2012-03-12 18:51:33
【问题描述】:
我在构建相当庞大的 linq 查询时遇到问题。基本上我有一种情况,我需要在循环中执行子查询来过滤从数据库返回的匹配数。示例代码在下面的循环中:
foreach (Guid parent in parentAttributes)
{
var subQuery = from sc in db.tSearchIndexes
join a in db.tAttributes on sc.AttributeGUID equals a.GUID
join pc in db.tPeopleIndexes on a.GUID equals pc.AttributeGUID
where a.RelatedGUID == parent && userId == pc.CPSGUID
select sc.CPSGUID;
query = query.Where(x => subQuery.Contains(x.Id));
}
当我随后在查询变量上调用 ToList() 时,似乎只执行了一个子查询,并且留下了一堆我不需要的数据。但是这种方法有效:
IList<Guid> temp = query.Select(x => x.Id).ToList();
foreach (Guid parent in parentAttributes)
{
var subQuery = from sc in db.tSearchIndexes
join a in db.tAttributes on sc.AttributeGUID equals a.GUID
join pc in db.tPeopleIndexes on a.GUID equals pc.AttributeGUID
where a.RelatedGUID == parent && userId == pc.CPSGUID
select sc.CPSGUID;
temp = temp.Intersect(subQuery).ToList();
}
query = query.Where(x => temp.Contains(x.Id));
不幸的是,这种方法很糟糕,因为它会导致对远程数据库的多次查询,而如果我可以让它工作,那么最初的方法只会导致一次命中。有什么想法吗?
【问题讨论】:
标签: c# .net linq entity-framework-4