首页 > 解决方案 > Linq分组和最大值

问题描述

我是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"]}");
                }
            }

标签: linqmaxgrouping

解决方案


是的,你可以。

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() 是有问题的,但由于这是一个 DataTable,所以没什么大不了的。


推荐阅读