我的实体数据模型中有两个表(从旧数据库转换而来)
实体1:Food_I_Have_In_Fridge:
Food | Category
---------------
Apple | Fruit
Beef | Meat
Tomato| Veggie
Pork | Meat
Bacon | Meat
Orange| Fruit
Carrot| Veggie
实体2:Food_I_ate:
Date | Food
------------
01/01| Apple
01/01| Beef
01/02| Pork
01/03| Orange
01/04| Tomato
我想生成一份我按食品类别分类的最新食品清单。输出如下:
Categ| Food
-----------
Meat | Pork
Fruit| Orange
Veggi| Tomato
我在下面有相同的sql代码,但由于我们完全放弃了sql,我试图通过实体框架实现以下功能。
with FW as (
select a.[Date], f.category, a.food, a.date
from
[Food_I_ate] a
inner join
[Food_I_Have_In_Fridge] f on a.Food = f.Food
)
select
FW2.category,
FW2.Food,
FW2.Date
from
(select FW.category, max(fw.ix) as maxix
from FW group by FW.category) FW
inner join
FW FW2 on FW2.ix = FW.maxix and FW2.category = FW.category
我想知道如何使用实体框架来实现这个目标?
答案 0 :(得分:3)
试试这个,假设你的实体是db.FoodIAte
和db.FoodInFridge
(喜欢表名!):
var food = (from fif in db.FoodInFridge
join fia in db.FoodIAte on fif.Food equals fia.Food
select new
{
Food = fif.Food,
Category = fif.Category,
Date = fia.Date
})
.OrderByDescending(f => f.Date)
.ToList()
通过这种方式,您可以按照食用日期的顺序食用,最近一次。然后,如果你想要它们中的前三个,你可以做(确保你检查食物清单的长度/大小与你拍摄的数量相同,否则它会死!):
var topFood = food.Take(3).ToList();