【问题标题】:Linq grouping and max valueLinq分组和最大值
【发布时间】:2018-07-20 03:46:04
【问题描述】:

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

【问题讨论】:

    标签: linq max grouping


    【解决方案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() 是有问题的,但由于这是一个 DataTable,所以没关系。

    【讨论】:

    • 完美。谢谢。我会调查其他的。
    • @mjordan,绝对可以。至少您会喜欢这样一个事实,即您可以使用强类型值(因此是智能感知)而不是容易输入错误的字符串字段名称。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    • 1970-01-01
    • 2013-02-19
    • 1970-01-01
    相关资源
    最近更新 更多