1

Linq to SQL で次のクエリを作成する必要がありますが、2 つの派生テーブルがあるため、何が最善の方法なのかわかりません。助言がありますか。

SELECT A.ID  
FROM  
(   
    SELECT *   
    FROM Orders   
    WHERE ProductID = 5  
) A  
JOIN  
(  
    SELECT CustomerID, MAX(Price) Price   
    FROM Orders   
    WHERE ProductID = 5  
    GROUP BY CustomerID  
) B  
ON A.CustomerID = B.CustomerID and A.Price = B.Price  
4

3 に答える 3

1

特にクエリ構文の代わりにメソッド構文を使用する場合、LINQ でこれを簡素化できますか。

orders.Where(o => o.ProductID == 5)
    .GroupBy(o => o.CustomerID)
    .SelectMany(g => g.Where(o => o.Price == g.Max(m => m.Price)));

LINQ を作成するときの私のアドバイスは、単純に SQL ステートメントを正確に変換しようとしないことです。望ましい結果について考え、LINQ 用に設計されたソリューションを開発します。

于 2012-05-09T19:09:28.480 に答える
1
var b = (
    from o in db.Orders
    where o.ProductID == 5
    group o by o.CustomerID into og 
    select new {
        CustomerID = og.Key
        Price = Max(og.Price)
    }
);
var a = (
    from o in db.Orders
    join p in b on new {a.CustomerID, a.Price} equals 
            new {b.CustomerID, b.Price}
    where o.ProductID == 5
    select a.ID
);
var r = a.ToString();

これらの 2 つのリンクは、次のようなものを形成するときに非常に貴重です。

于 2012-05-09T19:04:58.350 に答える
0

これらの線に沿った何か:

var result = from a in context.Orders
             join b in (context.Orders.Where(o => o.ProductID == 5).GroupBy(o => o.CustomerID).Select(g => new { CustomerID = g.Key, Price = g.Max(o => o.Price)))
                 on new {a.CustomerID, a.Price} equals new {b.CustomerID, b.Price}
             where a.ProductID == 5
             select a.ID;
于 2012-05-09T19:03:25.247 に答える