EF Core查询多个表之间的条件

EF Core Query multiple tables with condition between

我有 2 个 table 结构如下:

用户

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

DictAges

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

我为 DbContext 创建了必要的模型,称为 UserModelDictAgesModel,它们具有与 table 结构中显示的完全相同的属性。我想用它的 id 查询一个用户,并根据用户的年龄加入 title。这是我之前使用的 MySQL 代码:

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

请注意,我没有向任何这些模型添加任何导航 属性(我应该添加任何吗??)

如何将这样的查询转换为 entity framework 核心查询?

因此您没有导航属性,您可以按如下所示进行操作。

基于查询:

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});

注意: 因此您没有导航属性,基于方法的语法非常complex.In 换句话说存在可读性问题。 B'cos of that I would like Query based syntax on these situations.

更新:

您可以使用本文了解导航属性:Relationships