от многих до многих Entity Framework GetUsersInRole ()

У меня есть два типа сущностей: Роль и Пользователь, которые имеют много-много отношений. То есть у роли есть свойство Users, а у Пользователя есть свойство Roles. Я должен получить массив строк с именами пользователей, которые относятся к определенной роли. Я написал код, но он не изящный. Я хочу сделать это с одним выражением 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
добавлено
Просмотры: 1
de
@HamletHakobyan да
добавлено автор Wachburn, источник
Является Role.Name уникальным для Роли ?
добавлено автор 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, источник