返回linq和的输入序列的元素

时间:2016-05-12 08:59:28

标签: c# linq

假设我有一个简单的列表,结构如下2列表所示:

letter|number

     a|1

     a|7

     b|2

     b|5

我希望Linq查询在“letter”列上进行分组,对“number”列的分组元素求和,并另外返回数组中的求和元素。这将导致下表:

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查询(如果可能)或其他简单的快速方式中执行此操作。

2 个答案:

答案 0 :(得分: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 :(得分:1)

这个怎么样?

elements = grp.Select(x => x.number).ToArray()