2

我在 C# 中有一个列表,例如

A,1
B,2
C,3
A,4
B,5

我想以列表形式返回结果:

A,5
B,7
C,3

所以按第一列分组并对第二列求和。

我该怎么做呢?很高兴使用 LINQ。到目前为止的声明和代码如下:

class Program
{
    static void Main(string[] args)
    {
        List<MyList> list = new List<MyList>();

        list.Add(new MyList() { Letter = "A", Value = 1 });
        list.Add(new MyList() { Letter = "B", Value = 2 });
        etc... 
    }
}

class MyList
{
    public string Letter { get; set; }
    public long Value { get; set; }
}
4

2 回答 2

4

听起来像你想要的:

var results = list.GroupBy(x => x.Letter, x => x.Value)
                  .Select(g => new { Letter = g.Key, Sum = g.Sum() });

(目前尚不清楚您的类型是什么,但希望您能从中获得所需的列表。)

有一个重载GroupBy可以让你一次完成所有这些,但我个人觉得上面的版本更简单。

于 2012-09-17T16:52:51.807 回答
3
var results = data.GroupBy(item => item.Letter)
.Select(group => new
{
  Letter = group.Key,
  Count = group.Sum(item => item.Value),
});

只需替换Letter为您提供“A”、“B”、“C”等的任何属性,并Value替换为您提供 1、2、3 等的任何属性。如果A,1是字符串,而不是具有两个属性的类,那么您将需要解析该字符串。

于 2012-09-17T16:53:05.440 回答