[英]SQL to LINQ conversion with inner join and where filters on different tables
以下查询会是什么:
select (UserRoles.RoleID, UserRoles.UserID) from UserRoles
inner Join Roles on Roles.RolesID = UserRoles.RoleID
where Roles.RoleName = 'Seller' AND UserRoles.UserID =1
看起来像实体框架?
我试过这个:
var check = from a in UserRole
join b in Role
on a.RoleID equals b.RoleID
select new{RoleName ="seller"};
但这是错误的,有人可以指导我吗?
查询的逐字转换(删除SELECT
的父项后)
select UserRoles.RoleID, UserRoles.UserID
from UserRoles
inner Join Roles on Roles.RolesID = UserRoles.RoleID
where Roles.RoleName = 'Seller' AND UserRoles.UserID =1;
将是查询语法中的以下内容,针对您的DbContext
称为context
(我假设 DbSets 的默认复数命名约定:)
var result = from a in context.UserRoles
join b in context.Roles
on a.RoleID equals b.RoleID
where b.RoleName == "Seller" && a.UserId == 1
select new {b.RoleID, a.UserID};
我们加入表格并投影出您想要的两列。
但是,如果您已在 EF 模型中定义了导航属性UserRole.Role
,则不需要显式加入,而且会更简单(我已切换到 lambda 语法):
var result = context.UserRoles
.Where(ur => ur.UserID == 1 && ur.Role.Name == "Seller")
.Select(ur => new {ur.RoleID, ur.UserID});
同样,将两列投影到一个匿名类中。 如果完全省略最后的Select
语句,您将获得完整的UserRole
实体实例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.