在C#中对列表进行分组和汇总

时间:2012-09-17 16:50:05

标签: c# linq

我在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; }
}

2 个答案:

答案 0 :(得分:4)

听起来像你想要的那样:

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

(目前还不清楚你的类型是什么,但希望你能从中得到所需的清单。)

GroupBy超载会让您在一次通话中完成所有这些操作,但我个人认为上述版本更简单。

答案 1 :(得分: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等的内容。{{{ 1}}是一个字符串,而不是一个具有两个属性的类,那么你需要解析该字符串。