C# 先连接EF代码多对多关系表

C# 先连接EF代码多对多关系表,c#,.net,entity-framework,ef-code-first,asp.net-mvc-5,C#,.net,Entity Framework,Ef Code First,Asp.net Mvc 5,我正在开发一个asp.net mvc5 ef5应用程序。我使用ef代码优先的方法。我有两个表User(UserId,Name)和Role(RoleId,Name)。我的DataContext类如下所示: using System.Data.Entity; namespace WebApp.DAL { public class DataContext : DbContext { public DataContext(): base("DefaultConnecti

我正在开发一个asp.net mvc5 ef5应用程序。我使用ef代码优先的方法。我有两个表User(UserId,Name)和Role(RoleId,Name)。我的DataContext类如下所示:

using System.Data.Entity;

namespace WebApp.DAL
{
    public class DataContext : DbContext
    {
        public DataContext(): base("DefaultConnection")
        {

        }
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<User>()
                .HasMany(u => u.Roles)
                .WithMany(r=>r.Users)
                .Map(m =>
                {
                    m.ToTable("UserRoles");
                    m.MapLeftKey("UserId");
                    m.MapRightKey("RoleId");
                });

        }
        public DbSet<User> Users { get; set; }
        public DbSet<Role> Roles { get; set; }
    }
}
使用System.Data.Entity;
名称空间WebApp.DAL
{
公共类DataContext:DbContext
{
public DataContext():基(“DefaultConnection”)
{
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity()
.HasMany(u=>u.Roles)
.WithMany(r=>r.Users)
.Map(m=>
{
m、 ToTable(“用户角色”);
m、 MapLeftKey(“用户ID”);
m、 MapRightKey(“RoleId”);
});
}
公共数据库集用户{get;set;}
公共数据库集角色{get;set;}
}
}

在我的控制器中,我有一个DataContext类型的属性上下文。我如何通过角色名访问控制器列表中所有具有角色的用户?

在这种情况下不需要显式连接,只需使用导航属性
角色进行查询即可

var adminUsers = Context.Users.Where(u => u.Roles.Any(r => r.Name == "admin"));

有一个简单的方法

var adminUsers=Context.Roles.First(r=>r.Name==“admin”).Users

对于许多角色

string[] roles = {"admin","guest"};    
var users = Context.Roles.Where(r => roles.Any(s => s == r.Name)).SelectMany(r => r.Users)

我喜欢你的回答。如果存在与角色名称匹配的字符串集合,您会怎么做。。。;var users=Context.Roles.Where(r=>Roles.Any(s=>s==r.Name))。选择many(r=>r.users)
如何在注释中换行?:)行末尾的两个空格不起作用