c# - list 与 list 的对照

标签 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 创建一个新列表,其中包含该名称的单个实例,并且 number 是使用 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)});

有更简单的方法吗?

最佳答案

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

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

关于c# - list 与 list 的对照,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23508633/

相关文章:

c# - 如何逐步构建 LINQ => SQL/entities 查询(带联接)?

c# - .NET:AssemblyVersionAttribute 中的大修订号

c# - 查找类型列表是否包含在类型列表列表中

c# - 如何使用 linq-to-xml 更改标签名称和获取属性

c# - 为 IList 优化 LINQ

linq - “等于”和“顺序等于”之间的区别?

c# - DateTimePicker 默认值 : How to avoid it?

c# - 在 C++ 中的两个类之间共享(QList 的)实例

c# - 在线处理 MVC 项目的最佳方式是什么?

c# - 如何在blazor Webassembly中访问appsettings