Предложение Linq OData "Куда" во вложенном списке - PullRequest
3 голосов
/ 04 октября 2011

Скажем, у меня есть следующий запрос OData Linq Query (выполняется для http://odata.netflix.com/v2/Catalog):

Genres.Where(x=>x.Name=="Adventures")
      .Select(y=> new
                  {
                    Genre = y.Name, 
                    Movie = y.Titles.Select(l=> new 
                                                {
                                                   l.Name, 
                                                   l.AverageRating
                                                 })
                    })

Как я могу изменить этот запрос, чтобы получить строки, где AverageRating был 3?

(ПРИМЕЧАНИЕ. Задача этого вопроса - выяснить, как выполнить предложение where для свойств расширенного подсписка моего элемента запроса основного уровня. Мой реальный запрос не относится даже к фиду Netflix OData.)

1 Ответ

1 голос
/ 05 октября 2011

Краткий ответ: в настоящее время это невозможно.Фильтр $ всегда (и только) применяется к набору сущностей верхнего уровня.В настоящее время нет способа фильтровать расширенные наборы сущностей.Фильтр $ может быть достигнут внутри расширенных наборов сущностей, но результат всегда будет фильтровать набор верхнего уровня.В V2 это работает для одноэлементных навигационных свойств (выражение в $ filter может проходить через них), в V3 вы можете использовать any / all, чтобы также включить свойства навигации по коллекции.

Причина, по которой это не может работать, заключается в том, чтопротокол OData не определяет синтаксис URI для вложенных фильтров.На самом деле он не определяет практически ни одного оператора для расширенных наборов сущностей, за исключением самого расширения и проекций.

...