C#Linq从列表中计算元素并计算值的总和

时间:2016-11-08 14:59:07

标签: c# linq list sum aggregation

我有一个对象列表列表,每个对象都包含一个字符串和一个浮点值。

我需要按字符串值(名称)对这些元素进行分组,并按浮点值的总和对组进行排序。

 public class Element
    {

        public string Name;
        public float Value;

        public Element(string name,float value) {

            Name = name;
            Value = value;

        }

    }


    List<List<Element>> elementslist = new List<List<Element>>();

    elementslist.Add(new List<Element>() { new Element("Apple", 1.2f), new Element("Banana", 0) });
    elementslist.Add(new List<Element>() { new Element("Apple", 2.1f), new Element("Banana", 1.4f) });
    elementslist.Add(new List<Element>() { new Element("Apple", 0), new Element("Banana", 0) });

p.s。:有没有更聪明的聚合算法来获得这个结果?也许也可以被认为是“关闭”这些值是按列表顺序...

非常感谢

2 个答案:

答案 0 :(得分:1)

首先是平面(SelectMany)列表,然后是GroupBy按名称和OrderBySum的值:

var groups = elements.SelectMany(l => l)
                     .GroupBy(e => e.Name)
                     .OrderBy(g => g.Sum(x => x.Value))

答案 1 :(得分:0)

这会为您IEnumerable<Element>提供一个名称元素和Values成员中Value的总和。希望它有所帮助。

elementslist.SelectMany(n => n).GroupBy(n => n.Name).Select(n => new Element(n.First().Name, n.Sum(p => p.Value))).OrderBy(n => n.Value)
  • 或OrderByDescending。