linq и подзапрос
От: vaa  
Дата: 21.04.22 09:58
Оценка:
Есть такой набор таблиц в известном фрэймворке
 from u in AspNetUsers
from r in AspNetRoles
from ur in AspNetUserRoles
where r.Id == ur.RoleId && u.Id == ur.UserId
select new { 
Email = u.Email, 
EmailConfirmed = u.EmailConfirmed,
Roles = ???? 
}

Как вытащить список ролей пользователя, чтобы user остался один, а роли списком или строкой?
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re: linq и подзапрос
От: BlackEric http://black-eric.lj.ru
Дата: 21.04.22 14:57
Оценка: +1
Здравствуйте, vaa, Вы писали:

vaa>Есть такой набор таблиц в известном фрэймворке

vaa>
vaa> from u in AspNetUsers
vaa>from r in AspNetRoles
vaa>from ur in AspNetUserRoles
vaa>where r.Id == ur.RoleId && u.Id == ur.UserId
vaa>select new { 
vaa>Email = u.Email, 
vaa>EmailConfirmed = u.EmailConfirmed,
vaa>Roles = ???? 
vaa>}
vaa>

vaa>Как вытащить список ролей пользователя, чтобы user остался один, а роли списком или строкой?

Я бы сделал 2 запроса не мучился. Ну или Union использовал.
https://github.com/BlackEric001
Re: linq и подзапрос
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 21.04.22 17:43
Оценка:
Здравствуйте, vaa, Вы писали:

vaa>Есть такой набор таблиц в известном фрэймворке

vaa>
vaa> from u in AspNetUsers
vaa>from r in AspNetRoles
vaa>from ur in AspNetUserRoles
vaa>where r.Id == ur.RoleId && u.Id == ur.UserId
vaa>select new { 
vaa>Email = u.Email, 
vaa>EmailConfirmed = u.EmailConfirmed,
vaa>Roles = ???? 
vaa>}
vaa>

vaa>Как вытащить список ролей пользователя, чтобы user остался один, а роли списком или строкой?

Ну Roles ты просто можешь вытащть без объединения. В свое время писал примеры https://infostart.ru/1c/articles/402433/

Roles=AspNetUserRoles.Where(ur => r.Id == ur.RoleId)
и солнце б утром не вставало, когда бы не было меня
Re[2]: linq и подзапрос
От: vaa  
Дата: 22.04.22 01:55
Оценка: +1
Здравствуйте, Serginio1, Вы писали:

vaa>>Как вытащить список ролей пользователя, чтобы user остался один, а роли списком или строкой?


S>Ну Roles ты просто можешь вытащть без объединения. В свое время писал примеры https://infostart.ru/1c/articles/402433/


S>
S>Roles=AspNetUserRoles.Where(ur => r.Id == ur.RoleId)
S>

Получилось так:
        var users = from u in db.Users
                    select new UserInfo
                    {
                        Email = u.Email,
                        EmailConfirmed = u.EmailConfirmed,
                        Roles = (from ur in db.UserRoles
                                 from r in db.Roles
                                 where ur.UserId == u.Id && r.Id == ur.RoleId
                                 select r.Name).ToList()
                    };


но из базы все равно строк по кол-ву ролей. мне важно было, чтобы объект создался один, но все же...(надо будет еще вашу статью почитать)
      SELECT [a].[Email], [a].[EmailConfirmed], [a].[Id], [t].[Name], [t].[UserId], [t].[RoleId], [t].[Id]
      FROM [AspNetUsers] AS [a]
      LEFT JOIN (
          SELECT [a1].[Name], [a0].[UserId], [a0].[RoleId], [a1].[Id]
          FROM [AspNetUserRoles] AS [a0]
          CROSS JOIN [AspNetRoles] AS [a1]
          WHERE [a1].[Id] = [a0].[RoleId]
      ) AS [t] ON [a].[Id] = [t].[UserId]
      ORDER BY [a].[Id], [t].[UserId], [t].[RoleId]
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[3]: linq и подзапрос
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 22.04.22 08:45
Оценка:
Здравствуйте, vaa, Вы писали:

https://infostart.ru/1c/articles/402038/
Как организована иерархия таблиц в 1С версии 8.3
и солнце б утром не вставало, когда бы не было меня
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.