2011-08-05 3 views
1

私はthis記事から、次のSQLに変換することができます方法:エンティティへのLINQにSQLを変換する

ctx.Fruits. 
Where(f => f.Price == ctx.CreateObjectSet<Fruit>(). 
Where(f1 => f1.Type == f.Type).Min(f1 => f1.Price)); 

が、それはctx.CreateObjectSetので動作しません:私はこのようにそれを試してみました

select type, variety, price 
from fruits 
where price = (select min(price) from fruits as f where f.type = fruits.type) 

SQLに変換することはできません。

答えて

2

理由だけ

ctx.Fruits. 
Where(f => f.Price == ctx.Fruits. 
Where(f1 => f1.Type == f.Type).Min(f1 => f1.Price)); 
+0

私に面倒!あなたが正しいです。私はちょうどこのCreateObjectSet ジョインの構文を使用して、ここでは動作しません – SiberianGuy

1

マイケルSagalovichの答えが与えられたSQLのための正しいものであるが、同じタイプの複数の果実は同じ最低価格を持っている場合は、あなたがのために複数のエントリを取得しますことを認識していませんそのタイプ。

これは、よりであるかもしれないもの、あなたが行っている:あなたは果物によってORDERBY価格、グループとしてそれを表現場合

ctx.Fruits.GroupBy(f => f.Type) 
    .Select(g => g.OrderBy(f => f.Price).FirstOrDefault()) 
+1

それは私が始めたものです...残念ながら、私のEFプロバイダ(MySQLの.NETコネクタ)はこの種のクエリをサポートしていません。 – SiberianGuy

1

が明確かつ容易にされることがあります。種類ごとにただ一つの最小価格の果物をつかみます.typeを入力して、各グループの最初の果物を選ぶだけです。また、GroupByは順序を保持しているので、読みやすい(または重要な場合はパフォーマンスに基づいて)ソートを最初から2番目に行うことができます。