EFコア条件を複数のテーブルに問い合わせる

asp.net-core-webapi entity-framework entity-framework-core

質問

私は次の構造を持つ2つのテーブルがあります:

ユーザー

UserId   |   Age
----------------
     1       15
     2       36
     3       25

DictAges

Title   |   FromAge   |   ToAge
-------------------------------
     1        0             20
     2        20            35
     3        35            100

UserModelDictAgesModelという名前のDbContextのための必要なモデルを作成しました。私はそのIDでユーザに問い合わせ、ユーザの年齢に基づいてタイトルに参加したいと思います。これまでに使用したMySQLコードは次のとおりです。

SELECT User.UserId, DictAges.Title 
FROM User, DictAges 
WHERE User.UserId = :id 
  AND User.Age BETWEEN DictAges.FromAge AND DictAges.ToAge

注意してください、私はこれらのモデルのいずれかに追加されたナビゲーションプロパティを持っていません。

このようなクエリをエンティティフレームワークのコアクエリにどのように変換できますか?

受け入れられた回答

したがって、ナビゲーションプロパティはありません。以下のようにすることができます。

クエリベース:

from p in ctx.User  
join q in ctx.DictAges on p.UserId equals q.Title
where p.UserId == :id AND p.Age BETWEEN q.FromAge AND q.ToAge
select new {UserId = p.UserId, Title = q.Title };

メソッドベース:

ctx.User.Join(ctx.DictAges, 
     p => p.UserId,
     q => q.Title, 
     (p, q) => new { User = p, DictAges = q })
.Where(s => s.User.UserId == :id && (s.DictAges.FromAge <= s.User.Age  && s.User.Age <=  s.DictAges.ToAge) )
.Select(ss => new { UserId = ss.User.UserId, Title = ss.DictAges.Title});

注意:したがって、ナビゲーションプロパティはありません。メソッドベースの構文は非常に複雑です。つまり、可読性の問題があります。これらの状況に関するクエリベースの構文を希望しています。

更新:

:あなたはこの記事を使用したナビゲーションプロパティについて学ぶことができます関係



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ