c# – 如何对DataTable进行分组并按字段对每个组进行排序?

我有一个如下所示的DataTable;

| ItemName | ItemNo |   ItemValue
     A         2            3,1
     B         1            2,2
     C         3            1,5
     A         2            2,0
     B         1            1,4
     A         2            2,7
     C         3            1,3
     C         3            2,1
     B         1            1,9

我想通过ItemName对DataTable进行分组,然后首先按ItemNo对这些组进行排序,然后按ItemValue对每个已排序的组进行排序.

我怎样才能做到这一点?

注意:排序后,我想要我的表如下;

| ItemName | ItemNo |   ItemValue
     B         1            1,4
     B         1            1,9
     B         1            2,2
     A         2            2,0
     A         2            2,7
     A         2            3,1
     C         3            1,3
     C         3            1,5
     C         3            2,1
最佳答案
table = table.AsEnumerable()
             .GroupBy(r => r.Field<string>("ItemName"))
             .OrderBy(g => g.Max(r => r.Field<int>("ItemNo")))
             .SelectMany(g => g.OrderBy(r => r.Field<double>("ItemValue")))
             .CopyToDataTable();

I want to group above DataTable by ItemName and sort these groups by
ItemNo first, then sort the each sorted group inside by ItemValue.

但ItemNo不是goup-key的一部分,那么如果每个组中的值不同(而不是样本数据),您希望如何按ItemNo对组进行排序?按最大/最小/平均值?我用Max来演示一种方法.

编辑所以实际上两列都属于同一个键,然后我会使用匿名类型作为包含两列的分组键,然后它更清晰:

table = table.AsEnumerable()
             .GroupBy(r => new
             { 
                 ItemName = r.Field<string>("ItemName"),
                 ItemNo   = r.Field<int>("ItemNo") 
             })
             .OrderBy(g => g.Key.ItemNo)
             .SelectMany(g => g.OrderBy(r => r.Field<double>("ItemValue")))
             .CopyToDataTable();

转载注明原文:c# – 如何对DataTable进行分组并按字段对每个组进行排序? - 代码日志