2

エンティティデータモデルに2つのテーブルがあります(古いデータベースから変換されました)

エンティティ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を完全に廃止しているため、EntityFrameworkを使用して次のことを実現しようとしています。

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

エンティティフレームワークを使用してこれを実現する方法を考えていましたか?

4

1 に答える 1

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()

そうすれば、食べた日付の順に、最新のものから順に食べ物を食べることができます。次に、それらの上位3つが必要な場合は、次のようにすることができます(ただし、フードリストが長い/取っている数と同じサイズであることを確認してください。そうしないと死んでしまいます!):

var topFood = food.Take(3).ToList();
于 2012-05-16T19:44:24.640 に答える