2012-02-17 96 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代碼。