使用LINQ对多列进行分组&将数据拆分为多个列表

时间:2015-06-11 01:23:48

标签: c# asp.net linq

最近我有一个任务需要做如下的描述,我的问题是LINQ能够做到吗?

假设我有一组数据,每个数据由三列组成:a(int),b(int),c(int)

我想要做的是按a and b对这些数据进行分组,对于每个不同的对(a,b),将相应的c存储到单独的列表中。

例如:如果我有一组数据(a,b,c){(1,3,5), (2,4,6), (1,3,7), (2,4,8)}

我想将数据拆分为两个单独的列表,每个列表包含c的值:

清单1(a = 1,b = 3):[5,7]

清单2(a = 2,b = 4):[6,8]

我所尝试的是按(a,b)按数据分组/排序,并得到一个排序的数据列表,我当然可以使用任何循环来迭代数据集并将它们分成几个列表,只是想知道是否有一个更漂亮的解决方案,比如使用单个LINQ查询?

任何建议都很高兴!谢谢:))

1 个答案:

答案 0 :(得分:1)

试试这个:

var result = data.GroupBy(x => new { x.a, x.b })
                 .Select(g => Tuple.Create
                 (
                     new List<int> { g.Key.a, g.Key.b }, 
                     new List<int>(g.Select(x => x.c))
                 )).ToList();

这是等价的查询表达式:

var result = (from x in data
             group x by new { x.a, x.b } into g
             select Tuple.Create(
                 new List<int> { g.Key.a, g.Key.b }, 
                 new List<int>(g.Select(x => x.c)))).ToList();