代码之家  ›  专栏  ›  技术社区  ›  Deniz Dogan

LINQ:获取具有给定属性的最大值的行

  •  6
  • Deniz Dogan  · 技术社区  · 15 年前

    MyID . 现在我想要每组中的一行 StatusDate

    这就是我想到的。

    rows.Select(x => x.Where(y => y.StatusDate == x.Max(z => z.StatusDate)).First())
    

    rows.Select(x => // x is a group
      x.Where(y => // get all rows in that group where...
                   // the status date is equal to the largest
                   // status date in the group
        y.StatusDate == x.Max(z => z.StatusDate)
      ).First()) // and then get the first one of those rows
    

    有没有更快或更惯用的方法?

    2 回复  |  直到 15 年前
        1
  •  15
  •   Jon Skeet    15 年前

    另一种选择是使用:

    rows.Select(x => x.OrderByDescending(y => y.StatusDate).First());
    

    真正地 我需要把一切都整理好(在LINQ中,这将是灾难性的,但您可以使用 MaxBy MoreLINQ 在这种情况下:)

        2
  •  0
  •   Codewerks    15 年前

    不知道这是否是Linq to SQL,但如果是,您也可以通过SQL中的rank()函数完成(按日期对每个组进行排序,然后从每个组中选择排名第一的行),然后将其作为Linq中的存储过程调用。我认为这是一种随着人们进入LINQ2SQL的边界而变得更加惯用的方法。。。