抱歉,标题不一致。我不知道如何简单地解释我的问题,这就是为什么我真的不知道如何查找它。我会用一个例子来解释...
假设我有一堂课:
public class cas
{
public string name { get; set; }
public int num { get; set; }
}
在该课程中,我制作了几个对象并将它们粘贴到列表中。为了举例,我将做4:
var list = new List<cas>
{
new cas { name = "firstname", num = 1 },
new cas { name = "firstname", num = 2 },
new cas { name = "lastname", num = 3 },
new cas { name = "lastname", num = 4 }
};
有没有办法获取此列表并合并具有相同名称字段的任何对象?
因此,新列表将是具有以下内容的1个对象:
name = "firstname", num = 3,
name = "lastname", num = 7
有一种明显的“漫长的”方法可以做到这一点,但它又笨重又昂贵(要遍历列表多次才能找到相似的对象)。我想知道我是否缺少任何干净的方法。我特意做了一个简单的例子,以便答案将是概念的证明,而不是为我编写代码。我的实际问题比这还复杂,但是我无法弄清楚它的这一方面。
使用Linq,您有一个GroupBy
方法和一个Select
方法:
list = list.GroupBy(x=> x.name)
.Select(x=> new cas() { name = x.Key, num = x.Sum(y=> y.num) }).ToList();
或使用优雅的查询语法:
list = (from item in list
group item by item.name into grouping
select new cas()
{
name = grouping.Key,
num = grouping.Sum(x => x.num)
}).ToList();
请注意,要使用这些方法,必须using System.Linq
在源文件的顶部添加。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句