LINQ левое внешнее соединение с ошибкой группирования и подсчета

#linq #join

#linq #Присоединиться

Вопрос:

Я создаю выражение запроса LINQ в LINQPad, которое использует левое внешнее соединение, группирование и подсчет. Запрос выдает следующую ошибку.

‘AnonymousType # 1’ не содержит определения для ‘ContentTypeID’, и не удалось найти метод расширения ‘ContentTypeID’, принимающий первый аргумент типа ‘AnonymousType # 1’ (нажмите F4, чтобы добавить директиву using или ссылку на сборку)

Вот запрос.

 from t1 in ContentTypes
from t2 in VwContentTRIGOF.Where(x => t1.ContentTypeID == x.ContentTypeID amp;amp; new List<int> { 2588, 2227 }.Contains(x.ResearchAreaID)).DefaultIfEmpty()
where t1.IsActive == true
group new {t1, t2} by new { t1.ContentTypeID, t1.Label } into g
select new { g.Key.ContentTypeID, g.Key.Label, Disabled = g.Count(t => t.ContentTypeID == null) > 0 }
  

Ошибка указывает на последнее использование ContentTypeID в последней строке, но, похоже, я не могу упорядочить запрос для получения желаемого результата.

Есть предложения?

Спасибо.

Ответ №1:

У каждого элемента вашей группы есть записи t1 и t2 , нет ContentTypeID , поэтому я подозреваю, что ваш финал select должен быть:

 select new { g.Key.ContentTypeID, g.Key.Label,
             Disabled = g.Count(t => t.t2.ContentTypeID == null) > 0 }
  

(Это предполагает, что вы этого хотите t2 — если вы этого хотите, t1 измените его соответствующим образом… но, учитывая, что t1.ContentTypeID это часть ключа, это кажется маловероятным… подсчет будет просто количеством групп.)

Комментарии:

1. Слишком быстро для StackOverflow. Я не могу принять ваш ответ еще несколько минут. 🙂 Спасибо за вашу помощь.