Linq分组和最大值

时间:2018-07-19 19:33:55

标签: linq max grouping

我是Linq的新手。可以使用以下方法,但是我也可以在单个查询中获得类别的WorkOrderVersion(int)的最大值吗?似乎我应该能够,但不确定如何?

var results = from p in ExcelEstimateDataTable.AsEnumerable()
                          group p by p.Field<string>("Category") into g
                          orderby g.Key ascending
                          select new
                          {
                              Category = g.Key,
                              Properties = g
                          };

            foreach (var item in results)
            {
                Console.WriteLine($"Category: {item.Category}");

                foreach (DataRow dr in item.Properties)
                {
                    Console.WriteLine($"myLinqOutput: {dr["WorkOrderVersion"]}, {dr["Category"]}, {dr["SubCategory"]}");
                }
            }

1 个答案:

答案 0 :(得分:1)

可以。

var results = from p in ExcelEstimateDataTable.AsEnumerable()
                          group p by p.Field<string>("Category") into g
                          orderby g.Key ascending
                          select new
                          {
                              Category = g.Key,
                              Properties = g,
                              MaxWorkOrderVersion = g.Max( x => x.Field<int>("WorkOrderVersion") )
                          };

注意:由于您不熟悉Linq,因此可以在DataTable(Linq To DataSet)上使用这样的Linq。但是,稍后您会发现这比较困难。 Linq To Objects,Linq To SQL,Linq To EF ...都比使用数据表更容易。

那里的AsEnumerable()值得怀疑,但是由于这是一个数据表,所以没什么大不了的。