使用linq分组分组

时间:2015-09-01 07:22:10

标签: c# linq sorting group-by

我有一个这样的数据表:

F1    F2    F3
---------------
20    942   50
60    942   330
20    941   205
20    943   250
60    941   120

我希望将我的数据分组为具有相同F1的群集。而在每组中,我希望按F3然后F2排序。

结果数据必须如下:

F1    F2    F3
---------------   
60    942   330
60    941   120
20    943   250
20    942   50
20    941   115

如果你能帮助我处理我的问题,我将非常感谢你。 非常感谢

4 个答案:

答案 0 :(得分:0)

您不需要这里的小组,只需要OrderBy: -

var result = data.OrderByDescending(x => x.F1).ThenByDescending(x => x.F2);

Working Fiddle.

答案 1 :(得分:0)

也可能像:

var groups = dataset.GroupBy(item => item.F1);
foreach (var group in groups)
  foreach (var entry in group.OrderBy(g => g.F3).ThenBy(g => g.F2))
    .. do stuff ...

或者,如果您不想获得一个单一的数据集,您可以选择:

var groupedDataset =
  dataset
    .GroupBy(item => item.F1).
    .SelectMany(group => {
       var subSet = group.OrderBy(e => e.F3).ThenBy(e => e.F2);
       return subSet.Select(s => {
         F1 = group.Key,
         F2 = s.F2,
         F3 = s.F3
       });
    });

虽然相对于上面的答案,这看起来相当复杂。

答案 2 :(得分:0)

按3列排序可以使其正常工作:

data.OrderByDescending(x => x.F1).ThenByDescending(x => x.F3).ThenByDescending(x => x.F2);

此输入

F1    F2    F3
---------------
20    942   50
60    942   120
20    941   205
20    943   250
60    941   330

会给出

F1    F2    F3
60    942    330
60    941    120
20    943    250
20    942    250
20    941    115

答案 3 :(得分:0)

试试这个 -

第一组

var x = t.GroupBy(gp => gp.Name).OrderBy(group => group.Key).Select(group => Tuple.Create(group.Key,group.Count()) );

然后排序

x.OrderBy(gr => gr.Item2);