Запросить все названия актера, используя LINQ to Netflix OData - PullRequest
0 голосов
/ 03 июня 2010

Я экспериментирую с LINQPad, чтобы использовать LINQ для запроса данных ODf Netflix. Я пытаюсь найти все фильмы с конкретным актером. Например:

from t in Titles 
from p in t.Cast
where p.Name == "Morgan Freeman"
select t.Name

это приводит к:

NotSupportedException: может проецировать только последний тип объекта в переводимом запросе

Я тоже пробовал:

from p in People
from t in p.TitlesActedIn
where p.Name == "Morgan Freeman"
select t.Name

, что приводит к следующей ошибке:

NotSupportedException: метод «Выбор» не поддерживается

Я пробовал несколько других подходов, таких как использование идентификаторов в предложении where и выбор разных вещей, но ничего не вышло.

1 Ответ

1 голос
/ 10 июня 2010

Вы можете сделать это:

from p in People
where p.Id == 190
from t in p.TitlesActedIn
select new { Name = t.Name }

Но учтите, что для этого вам не нужно указывать Id, это означает: / Люди (190) / TitlesActedIn? $ = Выбрать имя

Если вам нужно фильтровать на основе неключевых свойств, вам нужно сделать что-то вроде:

from p in People
where p.Name == "Morgan Freeman"
select new Person {
    TitlesActedIn = p.TitlesActedIn
}

Это переводится как: / People? $ Filter = Имя eq 'Morgan Freeman' & $ expand = TitlesActedIn

Вы также можете просто запросить названия этих заголовков, но у LinqPad, похоже, нет способа сделать это из-за типа свойств, которые он генерирует. Это будет выглядеть так:

from p in People
where p.Name == "Morgan Freeman"
select new Person {
    TitlesActedIn = p.TitlesActedIn.Select(t => new Title { Name = t.Name })
}

Что будет означать: / People? $ Filter = Имя eq 'Morgan Freeman' & $ expand = TitlesActedIn & $ select = TitlesActedIn / Name

Спасибо, Витек Карас [MSFT]

...