2014-02-17 3 views
2

Я пытаюсь избежать соединения из 3-х частей, и я хочу перейти непосредственно к имени моей третьей таблицы, но Im new to linq to sql и Im не уверен, как мне нужно установить все до работайте правильно. Пример того, что я делаю, но не хочу, чтобы сделать это:Настройка linq для sql-контекста

from x in currentLogs 
join y in cDataContext.CategoryCountryCategoryTypeMappings 
on x.CategoryCountryCategoryTypeMappingID equals y.CategoryCountryCategoryTypeMappingID 
join cat in cDataContext.Categories 
on y.CategoryID equals cat.CategoryID 
where x.Response != 0 && cat.StorefrontID==storeID 
select x).Count(); 

Что я хочу сделать, это:

from x in currentLogs 
join y in cDataContext.Categories 
on x.CategoryCountryCategoryTypeMappingID equals y.CategoryCountryCategoryTypeMapping.CategoryCountryCategoryTypeMappingID 
where x.Response != 0 && y.StorefrontID==storeID 
select x).Count(); 

, но я получаю сообщение об ошибке при

cat.CategoryCountryCategoryTypeMapping.CategoryCountryCategoryTypeMappingID 

возвращается по моему автогенерированному dbml, Sequence представляет собой несколько объектов.

Моя раскладка выглядит следующим образом: DataContext

DownloadLog к cccmapping является один к одному, а все остальное это один ко многим. Возможно, это немного испортилось, но в журнале загрузки есть cccMapping, где, поскольку cccmapping имеет перестановки категорий countrys и типов категорий, каждая перестановка уникальна. Не уверен, что это делает таблицу сопоставления один к одному, или один для многих. Эфирный способ я создал свой контекст, чтобы делать то, что я пытаюсь сделать?

+0

Почему вы пытаетесь избежать объединения 3-х столов? В сценах, которые все равно должны произойти –

+0

Это может быть мелочь, но простое/удобочитаемость кода. Если у cccMappings есть категория, и эта категория имеет имя, имеет смысл в коде сказать cccMappings.categories.select (...). Имя –

+0

Почему вы не используете свойства навигации, такие как 'Category.CategoryCountryCategoryTypeMappings', которые должны быть в модели класса? Вам, вероятно, не нужно ни одного единственного соединения. –

ответ

0

Основываясь на вашей настройке, вы должны быть в состоянии использовать свойства навигации. Так что что-то в этом направлении должно работать.

currentLogs 
    .Where(log => log.Response != 0 && 
     log.CategoryCountryCategoryTypeMappings 
      .Any(map => map.Categories 
       .Any(cat => cat.StoreFrontID == storeID))).Count(); 
Смежные вопросы