2009-07-17 54 views

回答

5

这意味着你可以将查询添加额外的“经营者”。这很重要,因为你可以非常有效地做到这一点。

例如,假设你有一个返回员工列表(枚举)的方法:

var employees = GetEmployees(); 

和使用一个返回所有经理的另一种方法:

IEnumerable<Employee> GetManagers() 
{ 
    return GetEmployees().Where(e => e.IsManager); 
} 

你可以调用该函数以获得即将退休的经理并向他们发送这样的电子邮件:

foreach (var manager in GetManagers().Where(m => m.Age >= 65)) 
{ 
    SendPreRetirementMessage(manager); 
} 

流行测验:您的员工名单将迭代多少次?答案是,正好是一次;整个操作仍然只是O(n)!

此外,我不需要有单独的方法。我撰写这些步骤的查询都在同一个地方:

var retiringManagers = GetEmployees(); 
retiringManagers = retiringManagers.Where(e => e.IsManager); 
retiringManagers = retiringManagers.Where(m => m.Age >= 65); 
foreach (var manager in retiringMangers) 
{ 
    SendPreRetirementMessage(); 
} 

这样做的一个很酷的事情是,我可以改变在运行时,这样我可以包括或不包括内的组合物的一个组成部分if块,以便在运行时决定使用特定的过滤器,并且所有内容仍然很好,很漂亮。

+0

很好的解释,+1 – 2009-07-17 21:57:10

4

我认为这意味着你可以菊花链的查询,这样

var peterJacksonsTotalBoxOffice 
    = movies.Where(movie => movie.Director == "Peter Jackson") 
     .Sum(movie => movie.BoxOffice); 
相关问题