linq - 当他们说 LINQ 是可组合的时,他们是什么意思?

标签 linq

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

最佳答案

这意味着您可以在查询中添加额外的“运算符”。这很重要,因为您可以非常高效地做到这一点。

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

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 block 中包含或不包含合成的一部分,这样决定使用特定的过滤器是在运行时制作的,一切仍然很好。

关于linq - 当他们说 LINQ 是可组合的时,他们是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1145746/

相关文章:

c# - 如何使用 LINQ 读取包含 xincluded 文件的 XML?

c# - 看似简单的 LINQ 查询却让我感到困惑。我想要数组 A 中的所有项目,除非它存在于数组 B 中

c# - 使用 json.net 查询 JArray 的项目属性值

c# - 包含空值的 Linq 查询

c# - 即使没有空值,为什么会发出有关可为空类型的警告?

c# - 日期和值的字典,在 LINQ 中查找每年最大日期的值

c# - 如何将这些 foreach 循环转换为 LINQ 表达式?

c# - 如何在c#中使用IQueryable在动态查询中搜索日期

c# - 大数字的 IsNumeric Helper 方法

c# - 如何使用 LINQ 将数组转换为字典