列表与列表的整理

时间:2014-05-07 04:16:50

标签: c# linq

我有一个看起来像这样的对象列表

class foo
{
    string name;
    int number;
}

var myList = new List<foo>();

myList从SQLite数据库传播并按名称排序。没有理由不能有多个具有相同名称的条目,因此您可以拥有

myList[ = {"paul", 1234},{"paul", 12}, {"becki",99},{"becki", 33}...

我正在尝试基于myList创建一个新列表,该列表包含名称的单个实例,并且数字是使用LINQ的数字的总和。

我想的是

之类的东西
var myNewList = new List<foo>();
var names = myList.Select(t=>t.name).Distinct().ToList();
foreach(var n in names)
    myNewList.Add(new foo() {name = n, number = myList.Where(t=>t.name == n).Sum(t=>t.number)});

有更简单的方法吗?

1 个答案:

答案 0 :(得分:2)

按名称对项目进行分组,然后使用Key进行投影并对值进行求和:

var result = myList.GroupBy(f => f.name)
                   .Select(g => new foo
                   {
                       name = g.Key,
                       number = g.Sum(f => f.number)
                   }).ToList();