EF6 Выберите с отношением Многие ко многим

Набор представляет собой неупорядоченную группу различных объектов - не допускается дублирование объектов. Он обычно реализуется с использованием хеш-кода вставляемых объектов. (Конкретные реализации могут добавить упорядочение, но сам интерфейс Set не делает.)

Список - упорядоченная группа объектов, которая может содержать дубликаты. Он может быть реализован с помощью ArrayList, LinkedList и т. Д.

2
задан John Kinane 11 March 2019 в 15:23
поделиться

1 ответ

Я думаю, что один из способов добиться того, что вы пытаетесь сделать, это сделать следующее:

var query= PagesContext.Versions.Where(ve=>ve.ContentStatusID == 2)
                                .SelectMany(ve=>ve.View.Roles
                                                  .Where(r=>r.IsAdminRole == false)
                                                  .Select(r=> new RestrictedPage
                                                                   {
                                                                     ViewID = ve.ViewID,
                                                                     Title = ve.Title,
                                                                     RoleID = r.ID,
                                                                     Role = r.Role1,
                                                                     VersionID = ve.VersionID
                                                                   })).ToList();

В вашем случае таблица соединений не отображается напрямую, это скрыть, так что одно решение для получения данных связано вам нужно использовать метод расширения SelectMany. Сначала примените условие к одному из концов запроса, в моем примере это было Versions, а затем примените SelectMany, которое будет генерировать внутреннее соединение между обеими таблицами и сгладить результат в одной коллекции.

Обновление

Я думаю, что проблема в том, что версия и View на самом деле не связаны напрямую с вашей БД, поэтому вы собираетесь сделать явное внутреннее соединение:

var query= PagesContext.Versions.Where(ve=>ve.ContentStatusID == 2)
                                .Join( PagesContext.Views, ve=>ve.ViewId, v=>v.ID,(ve,v)=>v)
                                .SelectMany(v=>v.Roles
                                                  .Where(r=>r.IsAdminRole == false)
                                                  .Select(r=> new RestrictedPage
                                                                   {
                                                                     ViewID = ve.ViewID,
                                                                     Title = ve.Title,
                                                                     RoleID = r.ID,
                                                                     Role = r.Role1,
                                                                     VersionID = ve.VersionID
                                                                   })).ToList();
0
ответ дан octavioccl 11 March 2019 в 15:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: