当他们说LINQ可以组合时他们是什么意思?

时间:2009-07-17 21:20:21

标签: linq

这是什么意思,为什么(如果有的话)很重要?

2 个答案:

答案 0 :(得分: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块中包含或不包含组合的一部分,这样决定使用特定的过滤器是在运行时制作,一切都很美好。

答案 1 :(得分:4)

我认为这意味着您可以菊花链式查询,例如

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