假设我有一个简单的列表,结构如下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查询(如果可能)或其他简单的快速方式中执行此操作。
答案 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()