有条件哪里过滤器使用延迟执行?

P.B*_*key 3 c# linq

如果我有一个表格的查询

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;
Run Code Online (Sandbox Code Playgroud)

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

if (!string.IsNullOrEmpty(phaseFilter))
{
   query = query.Where(item => item.Phase == phaseFilter);
}
Run Code Online (Sandbox Code Playgroud)

此时我相信我已经失去了延迟执行的优势.使用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...
Run Code Online (Sandbox Code Playgroud)

啊.我可以以某种方式吃蛋糕并吃它吗?

Ry-*_*Ry- 6

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