2012-09-05 142 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(); 
相关问题