【发布时间】:2014-04-28 10:13:35
【问题描述】:
我有两个像下面这样配置为多对多关系的模型:
public class Permission
{
public int PermissionId { get; set; }
public string PermissionName { get; set; }
public virtual List<Role> Roles { get; set; }
}
public class Role
{
public int RoleId { get; set; }
public string Name { get; set; }
public string ID { get; set; }
public virtual List<Permission> Permissions { get; set; }
}
我想用 Linq 做一个Inner Join。我可以在 SQL 中轻松做到这一点,因为那里存在连接表。但是我怎么能用 linq 做到这一点?以下是我目前能做的:
from pr in Permissions
join role in Roles on pr.Roles.Select(s => s.RoleId).FirstOrDefault() equals role.RoleId
select new { pr.PermissionName, role.RoleId }
正如您在上面看到的,FirstOrDefault 会破坏结果,但除此之外我无法编译查询而不会出现错误。
以下是我尝试在 Linq 中编写的查询:
SELECT P.PermissionName, R.RoleId
FROM Permissions AS P
INNER JOIN PermissionRoles AS PR ON P.PermissionId = PR.Permission_PermissionId
INNER JOIN Roles AS R ON PR.Role_RoleId = R.RoleId
如您所见,连接表是内部连接,因此查询按预期工作
感谢任何帮助。
【问题讨论】:
标签: c# sql linq ef-code-first