2016-05-12 67 views
4

比方說,我有結構爲以下2列的表一個簡單的列表:返回一個LINQ總和的輸入序列的元素


letter|number 

    a|1 

    a|7 

    b|2 

    b|5 

我想有一個LINQ查詢列'字母'上的組,彙總列'數字'的分組元素,並另外返回數組中的求和元素。這將導致如下表所示:


a | 8 | {1,7} 

b | 7 | {2,5} 

我有什麼:

public class GroupedRow { 
    public int number { get; set; } 
    public string letter { get; set; } 
    public int[] elements { get; set; } 
} 

並在程序中:

List<GroupedRow> listfromquery = numberletterlist.GroupBy(x => x.letter) 
    .Select(grp => new GroupedRow() { 
     number = grp.Sum(x => x.number) 
     letter = grp.key.letter 
     // elements= 
    }; 

即使我看其他途徑做這個,我想在1 linq查詢中做到這一點(如果可能的話)樂),或另一種簡單快捷的方式。

回答

5

grp是元素組,它實現了IEnumerable<T>。只需從中選擇number,然後將其轉換爲如下數組:

List<GroupedRow> listfromquery = 
    numberletterlist.GroupBy(x => x.letter) 
    .Select(grp => new GroupedRow() 
    { 
     number = grp.Sum(x => x.number), 
     letter = grp.Key, 
     elements = grp.Select(x => x.number).ToArray() 
    }).ToList(); 
1

這是怎麼回事?

elements = grp.Select(x => x.number).ToArray() 
相關問題