2012-02-17 7 views
2

ビューのSQLクエリがあります。このビューLINQでMIN関数を使用する

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

私は今テストすることができないので、まったく正しいかもしれませんが、グループ分けを考慮していますか? –

+0

はい。ここでは、私が提供しているラインが、疑問符のあるコードに差し込まれると仮定しています。 – eouw0o83hf

+0

あなたは正しいです。私はその質問を誤解した。 – ken

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コードを表示することができます。

関連する問題