【问题标题】:Can this Aggregate Lambda expression be converted to a LINQ query?可以将此 Aggregate Lambda 表达式转换为 LINQ 查询吗?
【发布时间】:2015-04-11 22:01:56
【问题描述】:

我有一个使用 Lambda 表达式的聚合方法求和的整数列表:

var mylist = new int[] { 3, 4, 5 };

var result = mylist.Aggregate((a, b) => a + b);

据我了解,Lambda 表达式始终可以转换为 LINQ 查询。这样的 LINQ 查询将如何查找我的示例?

编辑:我了解 .Sum 在我的示例中添加数字可能会更好。但我真的很想知道这个聚合在 LINQ 查询中的外观。

【问题讨论】:

  • 试一试就知道了!
  • 这不公平!如果您的“要求”已更改,您应该对我的回答发表评论!

标签: linq lambda linq-to-objects


【解决方案1】:

它已经是一个 LINQ 查询,Aggregate 是一个 LINQ 运算符,我假设你的意思是它在 LINQ 理解语法中的样子?理解语法只有一些内置功能(select、where、multiple selects、groupby 等),它没有内置所有运算符,因此当您需要其中一个(例如聚合)时,您将其包裹在括号中并保留使用常规语法。由于除了聚合之外什么都没有,因此无法举个例子,所以我将从不同的查询开始:

var mylist = new int[] { 3, 4, 5, 6, 7, 8 };

var result = mylist
    .Where(item=>item %2 == 0)
    .Aggregate((a, b) => a + b);

var ComprehensiveResult = 
    (from item in mylist
     where item % 2 == 0
     select item)
    .Aggregate((a, b) => a + b);

综合语法更像是“来自 SQL 介绍的人们的 LINQ”,在其中您可以做的任何事情都是使用运算符无法做到的,但反过来并非如此,因为并非所有运算符都已构建在替换。唯一想到综合语法更好的地方(除了个人口味)是多重选择以生成笛卡尔积,这在普通方法语法中更难维护。

【讨论】:

    【解决方案2】:

    在这种情况下,聚合函数将数字相加。所以,等价的函数是SUM:

    var qry = mylist.Sum(x=>x);
    

    或

    var qry = (from n in mylist select n).Sum();
    

    [编辑]

    OP 已在未通知我的情况下向问题添加了额外信息。

    是的,可以将Aggregate 函数“转换”为 linq 查询,但需要扩展方法。见这篇文章:Cumulating values with LINQ

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多