Используйте LINQ для запроса вложенной коллекции OData - PullRequest
5 голосов
/ 21 апреля 2010

Я играю с новым Netflix OData feed (http://odata.netflix.com/Catalog/)) и у меня возникли некоторые проблемы. Я пытаюсь изучать LINQ в то же время, но мне трудно делать то, что я думал собирался быть довольно простым.

Я хотел бы вернуть список заголовков, которые соответствуют данному жанру. Объект Titles содержит коллекцию жанров. Я не уверен, как написать этот запрос. Моя попытка ниже, похоже, не работает с использованием LINQPad .

from t in Titles
where t.Genres.Name.Contains("ABC")
select t

Ответы [ 3 ]

7 голосов
/ 21 апреля 2010

Я смог получить свои результаты, используя LINQ:

from g in Genres
from t in g.Titles
where g.Name == "Horror"
select t

Таким образом, мне не нужно использовать Expand. Я также могу использовать URL: http://odata.netflix.com/Catalog/Genres('Horror')/Titles(), чтобы получить те же результаты. Этот пост Криса Вудраффа помог мне понять проблему.

1 голос
/ 21 апреля 2010

Если вы получаете DataServiceQueryException вместе с сообщением: Версия запроса '1.0' слишком мала для ответа. Самая низкая поддерживаемая версия - '2.0' .

Вам необходимо обновить версию .Net до .Net Framework 4 и загрузить LINQPad для .NET Framework 4.0

0 голосов
/ 21 апреля 2010

Кайл, Это даст вам список всех фильмов по жанру

(from g in Genres.Expand("Titles")
where g.Name == "Horror"
select g).Dump();

Это создаст следующий URL в LinqPad

/Catalog/Genres('Horror')?$expand=Titles

Интересно, что мне нужно было использовать .Expand синтаксис, чтобы получить его.Когда я перехожу к каналу odata netflix с помощью своего браузера и хочу получить те же данные, я могу получить их по следующему URL: http://netflix.cloudapp.net/Catalog/Genres('Horror')/Titles

Должен быть способ получить его без .Expand

...