Оставьте присоединиться в Linq к сущностям - PullRequest
1 голос
/ 19 января 2011

Я пытаюсь выполнить левое соединение, используя Linq, и не удается. Я попытался последовать нескольким примерам и закончил с этим (failinmg) запросом linq:

   var defaultCategories = (from cats in Db.categories
                                 join defaults in Db.payee_default_category on cats.category_id equals
                                     defaults.category_id
                                     into merged
                                 from results in merged.DefaultIfEmpty()
                                 select new {cats.category_id, cats.description}).ToList();

Итак, мне нужно получить ВСЕ элементы в моей таблице категорий, присоединиться к payee_default_category на Categories.category_id = Payee_Default_Category.Category_id и вернуть Category_id, Category.Description и логическое значение, если в Таблица payee_default_category.

Однако (пропуская факт, что я не показываю, есть ли соответствующая запись ...) во время выполнения, я получаю ошибку:

"LINQ to Entities не распознает метод 'System.Collections.Generic.IEnumerable 1[Data.payee_default_category] DefaultIfEmpty[payee_default_category](System.Collections.Generic.IEnumerable 1 [Data.payee_default_category])', и этот метод нельзя преобразовать в выражение хранилища."

1 Ответ

2 голосов
/ 19 января 2011

Прежде всего, метод DefaultIfEmpty не поддерживается в версии 1 Entity Framework, но поддерживается в версии 4. Возможно, вы захотите обновить.

Во-вторых, поскольку вы ищете только логическое значение, чтобы определить, есть ли какие-либо значения по умолчанию, вы не выполняете реальное внешнее объединение столько, сколько «существует», и вы должны быть в состоянии достичь этого следующим образом:

var defaultCategories = 
   (from cats in Db.categories
    let defaults = Db.payee_default_category.Where(
        d => d.category_id == cats.category_id)
    select new {cats.category_id, cats.description, hasDefaults = defaults.Any()})
    .ToList();

Кроме того, ваш контекст Entity Framework в идеале должен быть настроен с отображением таблиц, что сделает ваш запрос еще проще:

var defaultCategories = 
    (from c in Db.categories
     select new {c.category_id, c.description, 
         hasDefaults = c.payee_default_categories.Any()})
    .ToList();
...