我有一个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
Run Code Online (Sandbox Code Playgroud)
我想在DataTable上面ItemName进行分组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
Run Code Online (Sandbox Code Playgroud)
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();
Run Code Online (Sandbox Code Playgroud)
我想通过ItemName对DataTable进行分组,然后首先按ItemNo对这些组进行排序,然后按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();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12348 次 |
| 最近记录: |