与lambda的复杂组合

时间:2014-02-13 13:58:11

标签: c# performance datatable group-by grouping

我想使用C#LINQ查询对我的数据表进行分组,并以最低和最高价格返回表。例如,波纹管表将按ItemNumber分组,然后按Cat1分组。对于生产结果,我需要获得集团的最低和最高价格。

ItemNumber  Cat1    Low Price   High Price
100         Item1   1           10
150         Item2   2           11
100         Item1   2           12
150         Item2   5           18

结果

ItemNumber  Cat1    Low Price   High Price
100         Item1   1           12
150         Item2   2           18

1 个答案:

答案 0 :(得分:2)

假设结果是另一个带有聚合数据的DataTable

var aggrTable = table.Clone(); // schema only
var groups = table.AsEnumerable()
    .GroupBy(r => new { ItemNumber = r.Field<int>("ItemNumber"), Cat1 = r.Field<string>("Cat1") });
foreach(var group in groups)
{
    DataRow row = aggrTable.Rows.Add();
    row.SetField("ItemNumber", group.Key.ItemNumber);
    row.SetField("Cat1", group.Key.Cat1);
    row.SetField("Low Price", group.Min(r => r.Field<int>("Low Price")));
    row.SetField("High Price", group.Max(r => r.Field<int>("High Price")));
}

结果表(使用您的样本数据测试):

    ItemNumber    Cat1       Low Price   High Price
      100         Item1         1           12
      150         Item2         2           18