Dot*_*row 3 linq linqpad wcf-data-services
我正在使用以下Linq查询:
from p in People
where p.Name == "George Lucas"
select p.TitlesActedIn
Run Code Online (Sandbox Code Playgroud)
其中TitlesActedIn是一个列表.人和TitlesActedIn是关联的
但我收到错误:
InvalidCastException:无法将类型为"System.Linq.Expressions.PropertyExpression"的对象强制转换为"System.Data.Services.Client.ResourceExpression".
请建议解决方案.
一个非常简单的方法:
var query = People
.Expand("TitlesActedIn")
.Where(p => p.Name == "George Lucas")
.First()
.TitlesActedIn.Select(t => t.ShortName);
query.Dump();
Run Code Online (Sandbox Code Playgroud)
需要注意的是,如果您传递的名称不存在,则会崩溃.(第一个运算符将抛出异常.您需要保证名称存在,或者分两步执行.
如果你想一步到位,那就归结为:(请注意回来的内容)
http://odata.netflix.com/catalog/People()?$filter=Name eq 'George Lucas'&$top=1&$expand=TitlesActedIn
Run Code Online (Sandbox Code Playgroud)
你需要扩展或者它会在之后退出评估.First(),因为TitlesActedIn将为空.
它基本上转换为选择Person,包括(展开)TitlesActedIn关联,然后选择名称(客户端)
这样做的缺点是你要从Titles表中撤回所有(所有字段).因此,对于与其返回的Person关联的每个标题(Title,Year,Description,ShortName等).
如果您在两个查询中执行此操作,则只能从TitlesActedIn关联中撤回"ShortName".