2016-07-27 54 views
-1

对不起不连贯的标题。我不知道如何简洁地解释我的问题,这就是为什么我不知道如何查看它。我将解释使用的例子...给定几个相同对象的列表,根据字段值将它们组合并组合它们

比方说,我有一个类:

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 

有明显的“长”的方式来做到这一点,但它是笨重且昂贵(浏览清单几次找到像-objects)。我想知道我是否错过了任何干净的做法。我故意做了一个简单的例子,以便答案是一个概念证明,而不是为我写代码。我的实际问题比这更复杂,但我无法弄清楚它的这一方面。

回答

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在源文件的顶部。

0

您可以使用LINQ,你就必须给他们组上name属性,然后对每个组的像num特性总结:

var result = list.GroupBy(x=>x.name) 
       .Select(g=> new cas 
          { 
           name = g.Key, 
           num = g.Sum(x=>x.num) 
          }); 
相关问题