3

如果我有表格查询

var query = from items in entityDb.TableName
            join requestedBy in entityDb.People on items.RequestedById equals requestedBy.PersonId in requestedByOuter
            from requestedBy in requestedByOuter.DefaultIfEmpty()
            select items;

还假设这是一个大查询,还有 10 个连接。然后我有一个条件过滤器

if (!string.IsNullOrEmpty(phaseFilter))
{
   query = query.Where(item => item.Phase == phaseFilter);
}

在这一点上,我相信我已经失去了延迟执行的优势。如果有 1000 条结果,这可能会损害性能。考虑到我的查询实际上是 50 行代码,我宁愿不去...

if(phaseFilter not null)
  //50 lines....
else if(filter2 not null)
  //50 lines...
else if (filter2 not null and phaseFilter not null)
  //50 lines...

啊。我可以以某种方式拥有我的蛋糕并吃掉它吗?

4

2 回答 2

6

不,你不会失去它。执行仍然被推迟,因为.Where只返回一个IEnumerable<T>过滤IEnumerable<T>传递给它的过滤器,并且当你这样做时它仍然被推迟。

于 2012-08-06T16:19:16.970 回答
4

不,您的案件不会失去延期执行。

您可以通过多次IQueryable调用来修改 ,并在您枚举时执行实际查询。WhereIQueryable

以上适用于其他方法,OrderBy例如。

于 2012-08-06T16:18:35.453 回答