以下查询将是什么:
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"};
但这是错误的,有人可以指导我吗?
答案 0 :(得分:1)
查询的逐字转换(在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
实体实例。