简体   繁体   English

多对多的Entity Framework GetUsersInRole()

[英]many to many Entity Framework GetUsersInRole()

I have two Entity types: Role and User that have many to many relation. 我有两个实体类型:角色和用户,有很多关系。 That is Role has the Users property, and User has the Roles property. 即Role具有Users属性,User具有Roles属性。 I must get the string array with usernames that belong to defined role. 我必须使用属于已定义角色的用户名来获取字符串数组。 I wrote some code, but it is not elegant. 我写了一些代码,但它并不优雅。 I want do that with one linq expression. 我想用一个linq表达式做到这一点。 Is it possible? 可能吗?

public override string[] GetUsersInRole(string roleName)
{
    List<string> names = new List<string>();
    using (MembershipDb db = new MembershipDb())
    {
        Role role = db.Roles.FirstOrDefault(r => r.Name == roleName);
        foreach (User u in role.Users)
        {
            names.Add(u.UserName);
        }
    }
    return names.ToArray();
}

Look at this: 看这个:

public override string[] GetUsersInRole(string roleName)
{
    using (MembershipDb db = new MembershipDb())
    {
        return db.Roles
           .Where(r => r.Name == roleName)
           .SelectMany(r => r.Users, (r, s) => s.User.UserName).ToArray();
    }
}
return db.Roles.Where(r => r.Name == roleName)
               .SelectMany(r => r.Users)
               .Select(u => u.UserName)
               .ToArray();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM