'Невозможно сравнить элементы типа' System.Collections.Generic.ICollection`1 '.Поддерживаются только примитивные типы (такие как Int32, String и Guid) и типы сущностей. '
Сущности и отношения (свойства навигации):
Case (1 <-> ∞) MeetingCase (1 <-> ∞) MeetingCaseOutcomes
Код ошибки:
IQueryable<Case> cases; // this is obviously attached to a context and able to access data)
var broken = cases
.Where(c => c.MeetingCases
.Where(mc => mc.ExpectedStartDateTime <= DateTime.Now)
.Any(m => m.MeetingCaseOutcomes == null || m.MeetingCaseOutcomes.Count == 0));
Я предполагаю, что проблема связана с отсутствием поддержки оператора «Любой», хотя я думал, что это будет работать в EF 4 (поскольку добавлена поддержка связанного оператора «Содержит»)).
Как мне реструктурировать этот вызов, чтобы получить то, что я хочу?
Я работаю с EF уже несколько месяцев и понимаю, что многие ошибки во время выполнения
ОБНОВЛЕНИЕ:
Приведенное выше условие Where содержит предикат, как показано ниже:
c.MeetingCases.Where(mc => mc.ExpectedStartDateTime <= DateTime.Now)
.Any(m => m.MeetingCaseOutcomes == null || m.MeetingCaseOutcomes.Count == 0)
Поскольку Any
возвращает логическое значение, все это создает предикатexpression.
Кроме того, целью этой логики является возвращение набора объектов Case, у которых нет записей MeetingCaseOutcome для любых записей MeetingCase, где собрание уже состоялось (отсюда сравнениеn до DateTime.Now).Это является частью системы планирования собраний, и это необходимо для проверки того, что результаты каждого собрания вводятся в систему после проведения собрания.