这意味着您可以向查询添加其他"运算符".这很重要,因为你可以非常高效地完成它.
例如,假设您有一个返回员工列表(可枚举)的方法:
var employees = GetEmployees();
Run Code Online (Sandbox Code Playgroud)
以及另一种使用该方法返回所有经理的方法:
IEnumerable<Employee> GetManagers()
{
return GetEmployees().Where(e => e.IsManager);
}
Run Code Online (Sandbox Code Playgroud)
您可以调用该函数来获取即将退休的经理并向他们发送如下电子邮件:
foreach (var manager in GetManagers().Where(m => m.Age >= 65) )
{
SendPreRetirementMessage(manager);
}
Run Code Online (Sandbox Code Playgroud)
流行测验:迭代员工列表的次数是多少次?答案恰好是一次; 整个操作仍然只是O(n)!
此外,我不需要有单独的方法.我可以在一个地方组成这些步骤的查询:
var retiringManagers = GetEmployees();
retiringManagers = retiringManagers.Where(e => e.IsManager);
retiringManagers = retiringManagers.Where(m => m.Age >= 65);
foreach (var manager in retiringMangers)
{
SendPreRetirementMessage();
}
Run Code Online (Sandbox Code Playgroud)
关于这一点的一个很酷的事情是我可以在运行时进行更改,这样我就可以在if块中包含或不包含组合的一部分,这样就可以在运行时决定使用特定的过滤器,而且一切都还在出来很漂亮.