Kis*_*ány 4 entity-framework entity-framework-core asp.net-core-webapi
我有 2 个具有以下结构的表:
用户
UserId | Age
----------------
1 15
2 36
3 25
Run Code Online (Sandbox Code Playgroud)
字典时代
Title | FromAge | ToAge
-------------------------------
1 0 20
2 20 35
3 35 100
Run Code Online (Sandbox Code Playgroud)
我为 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
Run Code Online (Sandbox Code Playgroud)
请注意,我没有向任何这些模型添加任何导航属性(我应该添加任何吗??)
如何将这样的查询转换为实体框架核心查询?
因此,您没有导航属性,您可以执行如下所示的操作。
基于查询:
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 };
Run Code Online (Sandbox Code Playgroud)
基于方法:
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});
Run Code Online (Sandbox Code Playgroud)
注意:因此您没有导航属性,基于方法的语法非常复杂。换句话说,存在可读性问题。因为我希望在这些情况下使用基于查询的语法。
更新 :
您可以使用本文了解导航属性:关系
| 归档时间: |
|
| 查看次数: |
11010 次 |
| 最近记录: |