如果我有表格的查询
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...
啊。我可以以某种方式吃我的蛋糕并吃它吗?
答案 0 :(得分:6)
不,你不会失去它。执行仍然是延迟执行,因为.Where
只会返回一个IEnumerable<T>
来过滤传递给它的IEnumerable<T>
,而且当你这样做时它仍然会被推迟。
答案 1 :(得分:4)
不,你不会丢失延期执行。
您可以多次调用IQueryable
修改Where
,并在枚举IQueryable
时执行实际查询。
以上内容适用于其他方法,例如OrderBy
。