LINQ - EF - FROM или JOIN - PullRequest
       2

LINQ - EF - FROM или JOIN

0 голосов
/ 11 июля 2011

Я использую c #, linq и EF4.

В моей базе данных есть две таблицы, представленные в моей концептуальной модели:

Таблицы базы данных:

CmsContents
CmsCategories
CmsRelatedCategories (Pure Juction Table)

Тип объекта:

CmsContent
CmsCategory

Набор предметов:

CmsContents
CmsCategories

У меня есть некоторые навигационные свойства:

for CmsContents --> CmsCategories --> Return Collection of Cms CmsCategory
for CmsCategories --> CmsContents --> Return Collection of Cms CmsContents

Мне нужен запрос Entity Framework для получения списка категорий для выбранного содержимого , не связанного с таблицей Junction.

В данный момент я использую этот код (обратите внимание на два ОТ):

var categories = from category in context.CmsCategories
                 from content in category.CmsContents
                 select category;

Возвращает список всех категорий, не связанных со всей базой данных и не относящихся к конкретному контенту.

Мне нужно показать список категорий, не связанных с СПЕЦИАЛЬНЫМ контентом

  • Есть идеи, как это сделать?
  • Могу ли я сделать это с JOIN? (EF не отображает напрямую таблицу чистых соединений)

Не могли бы вы написать мне запрос LINQ, чтобы я мог получить четкую картину. Спасибо за вашу помощь.

Ответы [ 2 ]

0 голосов
/ 11 июля 2011

Я думаю, что вы хотите выбрать из CmsCategories и исключить все, что является в ассоциативной таблице.

var query =
            context
                .CmsCategories
                .Except(context.CmsRelatedCategories.Select(x=>x.CmsCategory));
0 голосов
/ 11 июля 2011

Вы можете попробовать:

CmsCategories.Except(myContent.CmsCategories)

myContent является экземпляром CmsContent, предполагая, что вы получили его раньше и у вас включена отложенная загрузка.

Редактировать: возможный образец кода:

var myContent = context.CmsContents.FirstOrDefault(c => c.Id == 1);
var contentCategories = myContent.CmsCategories;
var otherCategories = context.CmsCategories.Except(contentCategories);
foreach (var item in otherCategories)
{
//whatever you need to do
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...