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

时间:2016-10-09 19:16:58

标签: entity-framework entity-framework-core asp.net-core-webapi

我有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

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

我怎样才能将这样的查询翻译成实体框架核心查询?

1 个答案:

答案 0 :(得分:2)

因此,您没有导航属性,您可以执行以下操作。

基于查询:

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

注意:因此您没有导航属性,基于方法的语法非常复杂。换句话说,存在可读性问题。 B&#39; cos我想在这些情况下使用基于查询的语法。

更新:

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