列出基于属性和重复总和的不同条目

时间:2014-05-22 11:39:42

标签: c# list lambda

我想知道我可能会问一个简单的问题,但试图找到一个优雅的解决方案。我有一种情况,下面是行

标签 价值

  1. Alabama AB 9
  2. Alabama AB 4
  3. 亚利桑那州 AZ 5
  4. 德克萨斯州 TX 6
  5. 德克萨斯州 TX 15
  6. 加利福尼亚 CA 14
  7. 加利福尼亚 CA 11
  8. 加利福尼亚 CA 2
  9. 考虑到上面的List<ValueLabels>对象(每个ValueLabel对象都有State,Label和value的集合),我应该生成另一个包含以下信息的列表。

    1. Alabama AB 13
    2. 亚利桑那州 AZ 5
    3. 德克萨斯州 TX 21
    4. 加利福尼亚 CA 27
    5. 这意味着,最终,我应该获得基于State属性的唯一记录,value属性应该是基于State属性的所有重复条目的总和。

      我已将ListObj.DistinctBy(p => p.State).ToList()函数与lambda表达式一起使用,但我无法将这些值添加到gether中。

      任何人都可以帮助我实现上述目标吗?如果需要进一步的信息,请告诉我。

3 个答案:

答案 0 :(得分:2)

未经测试,但这应该有效。

var newList = list.GroupBy(x=> new {x.State , x.Label })
                  .Select(x=> new YourClass(x.Key.State, x.Key.Label, x.Sum(x=>x.Value) ))
                  .ToList();

答案 1 :(得分:2)

On solution正在使用分组:

var result = from o in listObj
             group o by o.State into g
             select new ValueLabels() 
             { 
                 State = g.Key, 
                 Label = g.First().Label,
                 Value = g.Sum(i => i.Value)
             };

答案 2 :(得分:0)

试试这个:

MyListOfComplextData.GroupBy(r => r.state) .Select(a => new { sum= a.Sum(b => b.code), Name = a.Key}) .ToList();