Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Left Outer Join LINQ to Entities 
:(
    Опции темы
Anark1
Дата 5.2.2011, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 622
Регистрация: 15.12.2006
Где: RF -> Moscow

Репутация: нет
Всего: 11



Здравствуйте,
задача сделать Left Outer Join средствами Linq to Entities. Искал примеры, кое-что нашел, но у меня не работает.
Конкретно задача. Есть некоторые значения Choices (например профессии), которые сгруппированы по группам Groups (например область деятельности). Существует таблица языков Languages, таблица переводов Translations для каждого значения (наших условных профессий).  Но переводы есть не для всех значений. Задача - выполнить выборку всех значений (таблица Choices), которые находятся в одной группе (например по условию Groups.Id == 1) и если для указанного языка (пусть для Languages.Id == 1) существуют переводы выбранных значений, то дописать еще и значения этих переводов.
Пытаюсь сделать что-то такое:
Код

var val            =  from  g in _groupsRepository.ListItems()
                           from c in g.Choices
                           join tr in _translationRepository.ListItems().Where(tr => tr.LanguageId == 1).ToList()
                           on c.Id equals tr.Choices.Id into res
                           where  g.Id == 1
                           from r1 in res.DefaultIfEmpty()
                           select
                              new
                              {
                                  ChoiceId = c.Id, 
                                  Value = c.Value,
                                  TranslationId = r1.Id,
                                  TranslationValue = r1.Value,
                              };

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

Была еще идея сделать без join'a, сделать 2 выборки: всех значений из группы и всех значений из группы с переводом, потом операциями со множествами получить нужный результат, но в таком случае обычное сравнение не будет работать (нужно сравнивать только c.Id), то есть нужно писать класс, реализующий IEqualityComparer, а как это делать с анонимными типами непонятно.

Сам только начал работать с Linq, буду благодарен за любую помощь.


--------------------
Enjoy yourself, still you can...;)

user posted image

user posted image
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | LINQ (Language-Integrated Query) | Следующая тема »


 




[ Время генерации скрипта: 0.0555 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.