2016-11-08 59 views
1

我有一個對象列表的列表,每個列表包含一個字符串和一個浮點值。來自列表和計數總和的值的C#Linq組元素

我需要按字符串值(名稱)對這些元素進行分組,並按浮點值的總和排序組。

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 .:有沒有更聰明的聚合算法來獲得這個結果?或許也可以考慮的「關閉」這些值在列表中的順序...

非常感謝您

回答

0

這會給你一個IEnumerable<Element>一個元素的名稱和ValuesValue成員的總和。希望能幫助到你。

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。
1

一平(SelectMany)列表,然後GroupBy按名稱和OrderBy由值Sum

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

不妨爲輸出添加'.Select(x => new {Name = g.Key,Sum = g.Sum(y => y.Value)})''。 – clarkitect

+0

@clarkitect:是的,我認爲這個問題,但是這個問題並不清楚,並且它說它想要命令我把它放在一組中。 –

+1

謝謝,我需要一點關於總和的語法:) -clarkitect謝謝你的插件 -Arturo,你是正確的abot分組,如何訪問然後enumerable爲了有第二個結果? –