2016-07-27 52 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) 
          }); 
相關問題