每种类型的最新记录

本文关键字:最新 新记录 类型 种类 | 更新日期: 2023-09-27 18:34:19

我的实体数据模型中有两个表(从旧数据库转换而来)

实体 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

我想知道如何使用实体框架实现这一目标?

每种类型的最新记录

试试这个,假设你的实体是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();