这意味着您可以向查询添加其他“运算符”。这很重要,因为您可以非常有效地完成它。
例如,假设您有一个返回员工列表(可枚举)的方法:
var employees = GetEmployees();
另一种方法使用该方法返回所有管理器:
IEnumerable<Employee> GetManagers()
{
return GetEmployees().Where(e => e.IsManager);
}
您可以调用该函数来获取即将退休的经理并向他们发送如下电子邮件:
foreach (var manager in GetManagers().Where(m => m.Age >= 65) )
{
SendPreRetirementMessage(manager);
}
小测验:这会迭代您的员工列表多少次?答案是exactly一次;整个操作仍然只是 O(n)!
另外,我不需要为此使用单独的方法。我可以将这些步骤全部集中在一个地方编写查询:
var retiringManagers = GetEmployees();
retiringManagers = retiringManagers.Where(e => e.IsManager);
retiringManagers = retiringManagers.Where(m => m.Age >= 65);
foreach (var manager in retiringMangers)
{
SendPreRetirementMessage();
}
一件很酷的事情是我可以在运行时更改 is,这样我就可以在一个内部包含或不包含组合的一部分。if
块,这样使用特定过滤器的决定是在运行时做出的,并且一切仍然很好。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)