Entity framework EF Core查询多个条件介于

Entity framework EF Core查询多个条件介于,entity-framework,entity-framework-core,asp.net-core-webapi,Entity Framework,Entity Framework Core,Asp.net Core Webapi,我有两个表,结构如下: 用户 UserId | Age ---------------- 1 15 2 36 3 25 听写 Title | FromAge | ToAge ------------------------------- 1 0 20 2 20 35 3 35

我有两个表,结构如下:

用户

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

Title   |   FromAge   |   ToAge
-------------------------------
     1        0             20
     2        20            35
     3        35            100
我为DbContext创建了必要的模型,称为
UserModel
DictAgesModel
,它们的属性与表结构中显示的完全相同。我想用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});
基于方法:

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});
ctx.User.Join(ctx.DictAges,
p=>p.UserId,
q=>q.标题,
(p,q)=>new{User=p,DictAges=q})

.Where(s=>s.User.UserId==:id&&(s.DictAges.FromAge如果我不要求太多,你能写一个lamdba版本吗?看起来不错,我很快就会尝试。在那之前,你能不能添加一些关于导航属性的更多信息,我的意思是哪个类应该有导航属性,以及这会如何影响查询本身?谢谢你,如果给定的代码对我的解决方案有效,我会接受你的答案无论如何,我已经更新了这篇文章。请关注上面提到的文章。它解释了关于EF core上导航属性的所有内容。奇怪的是,这被接受了,因为提供的两个查询都不会产生与原始SQL相同的结果(第一个查询甚至没有编译).和导航属性不能用于创建范围相关性。公认的解决方案并不总是能够完美编译和工作。但最重要的是解决方案向OP显示的方向。如果该方向正确,OP可以根据其应用程序进行调整。@IvanStoev