EF Core查詢多個表之間的條件

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

我為DbContext創建了必要的模型,名為UserModelDictAgesModel具有表結構中顯示的完全相同的屬性。我想查詢具有其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合法嗎? 是的,了解原因