开发者

Convert SQL to LINQ To Entities

开发者 https://www.devze.com 2023-03-25 23:19 出处:网络
How can I convert the following SQL from this article: select type, variety, price from fruits where price = (select min(price) from fruits as f where f.type = fruits.type)

How can I convert the following SQL from this article:

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

I tried it this way:

ctx.Fruits.
Where(f => f.Price == ctx.CreateObjectSet<Fruit>().
Where(f1 => f1.Type == f.Type).Min(f1 => f1.P开发者_如何学Pythonrice));

but it doesn't work because ctx.CreateObjectSet can not be translated to SQL.


Why not just

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


Michael Sagalovich's answer is the correct one for the SQL given, but be aware that if multiple fruits of the same type have the same minimum price, you'll get multiple entries for that type.

This may be more what you're going for: Grabbing only a single smallest-priced fruit for each type:

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


Might be clearer and easier if you express it as orderby price, group by fruit.type and then just 'pick' the first fruit in each group. And since GroupBy preserves order you can do the sort first (or second) depending on which is easier to read (or based on performance if that matters).

0

精彩评论

暂无评论...
验证码 换一张
取 消