C# 使用实体数据模型中的哈希集进行LINQ查询

C# 使用实体数据模型中的哈希集进行LINQ查询,c#,asp.net-mvc,linq,asp.net-mvc-5,asp.net-identity,C#,Asp.net Mvc,Linq,Asp.net Mvc 5,Asp.net Identity,这个问题可能有点原始,但我很难掌握正确的查询逻辑 我有一个MVC5应用程序,我正在尝试使用ADO.NET实体数据模型从数据库中构建实体。我还使用了新的身份成员资格,并允许ASP.NET为我创建成员资格表 下面是我的简单SQL查询 SELECT p.* FROM [User] u INNER JOIN UserRole ur ON ur.UserId = u.UserId INNER JOIN [Role] r ON r.RoleID = ur.RoleId INNER JOIN

这个问题可能有点原始,但我很难掌握正确的查询逻辑

我有一个MVC5应用程序,我正在尝试使用ADO.NET实体数据模型从数据库中构建实体。我还使用了新的身份成员资格,并允许ASP.NET为我创建成员资格表

下面是我的简单SQL查询

SELECT p.* FROM [User] u
   INNER JOIN UserRole ur ON ur.UserId = u.UserId
   INNER JOIN [Role] r ON r.RoleID = ur.RoleId
   INNER JOIN RolePermission rp ON rp.RoleId = r.RoleID
   INNER JOIN Permission p ON p.PermissionId = rp.PermissionId
WHERE u.UserName = 'admin'
根据用户所处的角色,返回用户的所有权限;而且效果很好

当实体数据模型生成模型时,它会删除UserRole和RolePermission表(具有复合主键的表),并在每个对象中为我提供一个哈希集

所以用户看起来像:

public User()
{
   this.Role = new HashSet<Role>();
}
公共用户()
{
this.Role=new HashSet();
}
和作用:

public Role()
{
   this.User = new HashSet<User>();
   this.Permission = new HashSet<Permission>();
}
公共角色()
{
this.User=new HashSet();
this.Permission=newhashset();
}

许可也一样。我想知道在LINQ中运行相同查询的最佳方法是什么?谢谢你的建议。

这应该是正确的(使用我最喜欢的语法):

var permissions = Context.Users
    .Where(u => u.UserName == "admin")
    .SelectMany(u => u.Role)
    .SelectMany(r => r.Permission)