使用linq获取对象的总和

时间:2013-06-13 13:18:39

标签: c# linq sum

我有如下列表。

列表

  • 3 John
  • 1 Scully
  • 4爱德华
  • 9 Kim

尝试使用linq将其转换为;

列表

  • 3 John
  • 4 Scully
  • 8爱德华
  • 17 Kim

如果没有for循环我怎么能这样做。我想用linq实现这个目标。

2 个答案:

答案 0 :(得分:5)

在LINQ中没有一种方法可以做到这一点;你将不得不自己写。尝试这样的事情:

using System;
using System.Collections.Generic;

static class MyExtensions
{
    public static IEnumerable<TResult> AggregatingSelect<TItem, TAggregate, TResult>(
        this IEnumerable<TItem> items,
        Func<TItem, TAggregate, TAggregate> aggregator,
        TAggregate initial,
        Func<TItem, TAggregate, TResult> projection)
    {
        TAggregate aggregate = initial;
        foreach (TItem item in items)
        {
            aggregate = aggregator(item, aggregate);
            yield return projection(item, aggregate);
        }
    }

}
class Program
{
    static void Main(string[] args)
    {
        var numbers = new[] { 3, 1, 4, 9 };
        var result = numbers.AggregatingSelect(
            (int item, int agg) => item + agg, 
            0, 
            (int item, int agg) => agg);
        Console.WriteLine(string.Join(",", result));
    }
}

答案 1 :(得分:1)

只需使用经典的for循环即可。方式更简单,易懂,可维护和高效。

LINQ基本上不是为了根据给定列表的先前有序值更新项目而设计的。