使用LINQ to Netflix OData请求演员的所有头衔

时间:2010-06-03 10:59:58

标签: linq odata netflix

我正在尝试使用LINQPad来使用LINQ来查询Netflix OData。我正在尝试搜索与特定演员合作的所有电影。例如:

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子句中使用Id,然后选择不同的东西,但却无处可去。

1 个答案:

答案 0 :(得分:1)

你可以这样做:

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

谢谢, Vitek Karas [MSFT]