#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. Я не могу принять ваш ответ еще несколько минут. 🙂 Спасибо за вашу помощь.