多対多Entity Framework GetUsersInRole()

私は2つのエンティティタイプを持っています:ロールとユーザーは、多対多の関係を持っています。つまり、RoleにはUsersプロパティがあり、UserにはRolesプロパティがあります。私は定義された役割に属するユーザー名で文字列配列を取得する必要があります。 私はいくつかのコードを書いたが、それはエレガントではない。私は1つのlinq式でそれをしたい。出来ますか?

public override string[] GetUsersInRole(string roleName)
{
    List names = new List();
    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();
}
1
nl ru de
@HamletHakobyanはい
追加された 著者 Wachburn,
Role.NameRoles に固有のものですか?
追加された 著者 Hamlet Hakobyan,

2 答え

return db.Roles.Where(r => r.Name == roleName)
               .SelectMany(r => r.Users)
               .Select(u => u.UserName)
               .ToArray();
2
追加された

これを見てください:

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();
    }
}
2
追加された
提供された名前の役割がない場合はどうなりますか?
追加された 著者 Sergey Berezovskiy,
@ lazyberezovsky、あなたは正しいです。一定。
追加された 著者 Hamlet Hakobyan,