Получение всех пользователей и их ролей (членство и роли) с Linq2Sql, правильный запрос? - PullRequest
1 голос
/ 12 марта 2011

Я пытаюсь получить всех пользователей и их роли из сгенерированных таблиц членства и ролей, и я пришел к следующему:

var query = from a in aspnet_Users
            select new { a.UserName, a.UserId } into b
            join c in aspnet_UsersInRoles on b.UserId equals c.UserId
            join d in aspnet_Roles on c.RoleId equals d.RoleId
            group d.RoleName by b;

Это хорошо или есть лучший способ сделать это?

Ответы [ 2 ]

3 голосов
/ 13 марта 2011

Что ж, прямой подход с помощью запросов к базе данных будет работать. Тем не менее, вы полностью обходите членство и все функции, которые он предлагает.

Почему бы просто не использовать членство:

var roles = from MembershipUser u in Membership.GetAllUsers()
             select new {user = u,
             roles = Roles.GetRolesForUser(u.UserName)};

Таким образом, если в будущем структура базы данных изменится, ваш код все равно будет работать, поскольку вам не нужно знать реализацию.

Что ты думаешь?

ps: я не проверял, какой тип SQl генерируется, поэтому, если вам нужна супер производительность, все же может быть лучше перейти прямо к DB

0 голосов
/ 12 марта 2011

Да, есть. Вы в основном перевели SQL-запрос в LINQ и забыли, что в LINQ вы можете перемещаться по свойствам (например, user.Role), что приводит к автоматическим объединениям.

Было бы проще просто извлекать пользователей, в то же время говоря Linq SQL, чтобы привести роли пользователя (или другим способом: привести роли и включить связанных пользователей). Вот ссылка, чтобы увидеть, как это сделать без ленивой загрузки: http://www.singingeels.com/Blogs/Nullable/2008/10/27/EntityFramework_Include_Equivalent_in_LINQ_to_SQL.aspx.

Приветствия

...