2012-09-05 173 views
2

我創建了一個類名爲影響:如何將多個列表項合併爲一個項目?

public class Impacts { 
    public Impacts(string _Source, int _Number, string _Target) { 
     this.Source = _Source; 
     this.Number = _Number; 
     this.Target = _Target; 
    } 
} 

,並創造了這個類的一個列表:

List<Impacts> ListOfImpacts = new List<Impacts>(); 

然後,我將項目添加到創建的列表:

ListOfImpacts.Add(new Impacts("a" , 1 , "b")); //record 1 
ListOfImpacts.Add(new Impacts("c" , 1 , "d")); //record 2 
ListOfImpacts.Add(new Impacts("d" , 1 , "a")); //record 3 
ListOfImpacts.Add(new Impacts("d" , 1 , "a")); //record 4 
ListOfImpacts.Add(new Impacts("d" , 1 , "a")); //record 5 

我想結合記錄3和記錄4並記錄5,因爲它們具有相同的「Source」=「d」和相同的「Target」=「a」,所以我可以:

new Impacts("d", 3 , "a"); // 3 is the number of iterations of this record 

並刪除三條重複記錄。

有人可以幫助我嗎?

+0

你能清理一個困惑 - 做你想做的聚合記錄到'Sum'或'Count'?從你的例子中很難確定,因爲在你使用的例子中count和sum是相同的! – Jamiec

+0

實際上這並不重要,因爲每個新的影響總是數字變量等於1,所以總和將是迭代次數,這意味着計數。 – Hanady

回答

7
var newList = ListOfImpacts.GroupBy(g => new {g.Source, g.Target}) 
      .Select(g => new Impacts(g.Key.Source, g.Count(), g.Key.Target)) 
      .ToList(); 

活生生的例子:http://rextester.com/XOIYM52525

+0

謝謝..這非常有幫助:) – Hanady

2
  var newList = ListOfImpacts 
      .GroupBy(i => new { i.Source, i.Target }) 
      .Select(i => new Impacts(i.Key.Source, i.Sum(x => x.Number), i.Key.Target)) 
      .ToList(); 
相關問題