Linq - GroupBy和得到的集合属性的总和

时间:2017-04-11 12:32:14

标签: c# linq group-by

我有一个ObjectClass类型的集合对象。我需要一个查询,它将返回Name属性对象的分组列表。对于每个分组元素,相应的Value属性应该包含所有元素的总和。该组中的Value值 - 否则Value应为唯一的单个元素保留相应的Value值。 ObjectClass类型如下所示。

public class ObjectClass 
{
  int Id;
  string Name;
  int Value;
}

让var list属于List<ObjectClass>类型,并假设其中包含项目。

我试过了:

   var plas = list.GroupBy(p => p.Name).Select(g => new objectClass{
        Value = g.sum(p.value),
        Name = g.select(a=>a.Name).FirstOrDefault()
        });  

请指出正确的方向。

2 个答案:

答案 0 :(得分:0)

我认为这就是你所需要的......虽然我建议以更清晰的方式提出问题并提供输入和期望/预期的输出。

void Main()
{
    var someObjects = new List<ObjectClass>();

    someObjects.Add(new ObjectClass(){Name="numberWang", Value = 2});
    someObjects.Add(new ObjectClass(){Name="numberWang", Value = 3});
    someObjects.Add(new ObjectClass(){Name="numberTwang", Value = 4});
    someObjects.Add(new ObjectClass(){Name="numberTwang", Value = 5});

    //You could filter this beforehand with a Where clause ie. someObjects.Where(i=>i.Name == "whatever").Sum(i=>i.Value)
    int sumOfValuesOfAllObjects = someObjects.Sum(i=>i.Value);

    var sumByObjectClassName = someObjects.GroupBy(a=>a.Name).Select(b=>
    new ObjectClass() { Name = b.First().Name, Value =b.Sum(c=>c.Value) } );
}   

public class ObjectClass
{
  public string Name;
  public int Value;
}

答案 1 :(得分:-1)

int i = 0;
List<ObjectClass> foo = new List<ObjectClass>();

foreach(var item in foo.Where(item => item.Name = filter))
{
  i += item.Value;
}

旧但是金