0

我正在尝试使用 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,并选择不同的东西,但一无所获。

4

1 回答 1

1

你可以这样做:

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

但请注意,这要求您不指定 ID,这将转换为:/People(190)/TitlesActedIn?$select=Name

如果您需要根据非关键属性进行过滤,则需要执行以下操作:

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

这转化为:/People?$filter=Name 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=Name eq 'Morgan Freeman'&$expand=TitlesActedIn&$select=TitlesActedIn/Name

谢谢,维泰克卡拉斯 [MSFT]

于 2010-06-10T16:42:07.190 回答