C# Linq Group 来自列表的元素并计算值的总和

C# Linq Group elements from list and count sum of values

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

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

 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.: 有没有更聪明的聚合算法来获得这个结果?也许也可以考虑 "close" 这些值按列表顺序...

非常感谢

首先平整 (SelectMany) 列表,然后 GroupBy 按名称和 OrderBySum 个值:

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

这将为您提供一个 IEnumerable<Element>,其中一个元素的名称和 Value 成员中 Values 的总和。希望对你有帮助。

elementslist.SelectMany(n => n).GroupBy(n => n.Name).Select(n => new Element(n.First().Name, n.Sum(p => p.Value))).OrderBy(n => n.Value)
  • 或按降序排列。