Фильтрация запроса Linq / Odata по свойству навигации 1 ко многим - PullRequest
0 голосов
/ 18 февраля 2011

Следующий запрос отлично работает, когда я раскрываю свойство навигации, Расписания , которое имеет отношение от многих к 1 со свойством AssociatedListing :

from la in ListingAssociations.Expand("AssociatedListing").Expand("AssociatedListing/Schedules")
where la.ListingId==60
select la

В результатах я вижу несколько Schedule объектов, соответствующих каждому AssociatedListing объекту.Это хорошо.

Однако, когда я пытаюсь добавить фильтр в любое из полей Расписания :

from la in ListingAssociations.Expand("AssociatedListing").Expand("AssociatedListing/Schedules")
where la.ListingId==60 && la.AssociatedListing.Schedules.StartDate > DateTime.Today
select la

Я получаю сообщение об ошибке:

"System.Collections.ObjectModel.Collection" не содержит определения для «StartDate», и нет метода расширения «StartDate», принимающего первый аргумент типа «System.Collections.ObjectModel.Collection»... ".

Итак, я думаю, проблема в том, что StartDate является полем класса Schedule и" Schedules"Свойство навигации - это коллекция Schedule объектов, поэтому Schedules.StartDate не имеет никакого смысла.Но должен быть какой-то способ указать фильтр в этой ситуации много к одному.Как?

Любая помощь будет принята с благодарностью!

1 Ответ

2 голосов
/ 18 февраля 2011

Измените предложение , где , из этого:

where la.ListingId==60 
   && la.AssociatedListing.Schedules.StartDate > DateTime.Today

К этому:

where la.ListingId==60 
   && la.AssociatedListing.Schedules.All(x => x.StartDate > DateTime.Today)

Если вы хотите, чтобы у любого из расписаний была начальная дата, превышающая сегодняшнюю (вместо того, чтобы фильтровать с теми, у которых они все есть), измените All на Any.

...