2012-02-17 68 views
2

我有一个观点的SQL查询。这种观点使用MIN功能在LINQ

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 = ? 
      }; 

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

谢谢!

回答

3

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

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

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

+0

你可能是完全正确的,因为我现在不能测试,但这是否采取分组考虑? – 2012-02-17 19:32:54

+0

是;我假设在这里,我提供的线将被插入到代码显示在问号是。 – eouw0o83hf 2012-02-17 19:34:47

+0

你说得对。我误解了这个问题。 – ken 2012-02-17 19:36:13

1
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代码。