使用linq对组进行分组和排序

本文关键字:排序 linq 使用 | 更新日期: 2023-09-27 18:10:43

我有一个这样的数据表:

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
如果你能帮我解决我的问题,我将不胜感激。谢谢

使用linq对组进行分组和排序

也可以是:

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
       });
    });

在这里你不需要组,你只需要OrderBy:-

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

工作小提琴。

按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

试试这个-

第一组

var x = t.GroupBy(gp => gp. name)。order (group => group. key)。选择(group => Tuple.Create(group))。键,group.Count ()));

然后排序

x。order (gr => gr. item2);