【问题标题】:Using MIN function in LINQ在 LINQ 中使用 MIN 函数
【发布时间】:2012-03-09 04:51:25
【问题描述】:

我有一个视图的 SQL 查询。这个观点

SELECT
  [ID]
  [Name],
  [Category],
  MIN(OrderDate) as OrderDate, 
  MIN(DeliveryDate) as DeliveryDate
GROUP BY
  [ID], [Name], [Category]
FROM
  [OrdersView]

我知道这个查询是正确的,因为我的 DBA 把它给了我。但我需要将其转换为 LINQ。目前,我有以下内容:

var orders = from o in dataContext.OrdersView
             group o by new { o.ID, o.Name, o.Category } into grouping
             select new Order() {
               ID = grouping.Key.ID,
               Name = grouping.Key.Name,
               Category = grouping.Key.Category,
               OrderDate = ?,
               DeliveryDate = ?
             };

我的问题是我不知道如何在 OrderDate 和 DeliveryDate 上执行 MIN 函数并在我的 LINQ 查询中使用这些值。不幸的是,我无法更改数据库,因为它已被锁定。有人可以指出我正确的方向吗?

谢谢!

【问题讨论】:

    标签: c# linq min


    【解决方案1】:

    OrderDate = grouping.Min(a => a.OrderDate)

    DeliveryDate = grouping.Min(a => a.DeliveryDate)

    编辑:意外使用 o 而不是 grouping。那应该为你做。

    【讨论】:

    • 您可能完全正确,因为我现在无法测试,但这是否考虑到分组?
    • 是的;我在这里假设我提供的行将插入到问号所在的显示代码中。
    • 在您从 o 更改为 grouping 之前,我正在评论答案,现在看起来没问题 :)
    • 啊,忍者评论:)我一直用group o by o.Whatever into o,所以我一开始只是出于习惯才用o,哈哈
    【解决方案2】:
    var orders = from o in dataContext.OrdersView
             group o by new { o.ID, o.Name, o.Category } into grouping
             let orderDate = grouping.Min(order => order.OrderDate)
             let deliveryDate = grouping.Min(order => order.DeliveryDate)
             select new Order() {
               ID = grouping.Key.ID,
               Name = grouping.Key.Name,
               Category = grouping.Key.Category,
               OrderDate = orderDate,
               DeliveryDate = deliveryDate
             };
    

    以后我建议使用LINQPad 来测试您的查询。它允许查看生成的 SQL 代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-10
      • 2010-12-10
      • 2013-11-14
      • 2021-12-01
      • 2012-08-22
      • 2011-08-24
      • 1970-01-01
      • 2019-09-21
      相关资源
      最近更新 更多