Linq查询错误

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".

请建议解决方案.

Nix*_*Nix 5

一个非常简单的方法:

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".