抱歉标题不连贯。我不知道如何简明扼要地解释我的问题,这就是为什么我真的不知道如何查找它。我将使用一个例子来解释......
我们说我有一个班级:
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 }
};
有没有办法获取此List并将任何具有相同名称字段的对象组合在一起?
因此,新列表将是1个对象:
name = "firstname", num = 3,
name = "lastname", num = 7
有明显的&#34;长&#34;这样做的方式,但它将是笨重和昂贵的(通过列表几次找到喜欢对象)。我想知道我是否错过任何干净的方式。我故意做了一个简单的例子,这样答案就是概念证明,而不是为我编写代码。我的实际问题比这更复杂,但我无法弄清楚它的这一方面。
答案 0 :(得分:0)
使用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
。
答案 1 :(得分:0)
您可以使用linq,您必须将它们分组到name
属性上,然后对每个组的num
属性求和,如:
var result = list.GroupBy(x=>x.name)
.Select(g=> new cas
{
name = g.Key,
num = g.Sum(x=>x.num)
});