Преобразование отношения «многие ко многим» в один класс с ADO.Net - PullRequest
0 голосов
/ 05 июля 2018

у меня ViewModel

UserGroup.cs

public class UserGroup
{
    public User User { get; set; }

    public List<Group> Groups { get; set; }
}

И я хочу иметь User и все связанные Groups. Проблема в том, что query возвращает дубликаты всех пользователей, если с ним связано более 1 группы (и, конечно, ожидается). Первое, что приходит мне в голову, - это выборка всех пользователей одним запросом, а затем поиск каждого пользователя, чтобы получить связанные с ним группы и поместить его в список. Но я ищу лучший способ (если есть) сделать это.

Связь устанавливается с помощью соединительной таблицы.

SQL-запрос

SELECT u.UserName, ug.GroupName FROM auth.UserUserGroup uug 
INNER JOIN [auth].[User] u ON u.UserId = uug.UserId 
INNER JOIN auth.UserGroup ug ON ug.UserGroupId = uug.UserGroupId

1 Ответ

0 голосов
/ 05 июля 2018

Я уверен, что у кого-то будет более элегантное решение, но я использовал Linq для создания многоуровневого объекта несколько раз

var dbRecords = repository.Get(userId); // However you are getting your records, do that here
var result = dbRecords.GroupBy(x => x.UserId)
    .Select(g => new UserGroup
    {
        User = new User { UserName = g.First().UserName },
        Groups = g.Select(y => new Group { GroupName = y.GroupName }
    }
);

Я пытался использовать ваши имена объектов. Надеюсь, я не ошибся

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...