Linq 奥达林克问题
我创建了一个公开自托管ODataWeb服务的应用程序。web服务公开名为Main的对象集合。这些主要对象中的每一个都有一个对一个related Details对象的引用,这个对象非常大,有许多属性,将近一百个 我现在使用LinqPad来测试我的web服务,它似乎工作得很好 通常,我需要来自主集合和相关细节对象的信息。这可以通过运行以下linq查询来实现:Linq 奥达林克问题,linq,odata,Linq,Odata,我创建了一个公开自托管ODataWeb服务的应用程序。web服务公开名为Main的对象集合。这些主要对象中的每一个都有一个对一个related Details对象的引用,这个对象非常大,有许多属性,将近一百个 我现在使用LinqPad来测试我的web服务,它似乎工作得很好 通常,我需要来自主集合和相关细节对象的信息。这可以通过运行以下linq查询来实现: from m in Main.Expand( "Details" ) where m.ID==57 select m 这与url相对应
from m in Main.Expand( "Details" )
where m.ID==57
select m
这与url相对应:
"http://MachineName:port/ServiceName/Main()?$filter=ID eq 57&$expand=Details"
此查询工作正常,并返回完整的主对象和完整的相关详细信息对象
但是,Details对象非常大,通常我只需要两个对象中单个属性的值
我可以手动构建一个url,该url可以为我提供以下信息:
"http://MachineName/ServiceName/Main()?filter=ID eq 57&$expand=Details&$select=Property1,Details/Property2"
它返回仅包含Main.Property1的值和相关Details.Property2的值的xml
问题:为什么我不能创建一个linq查询来实现这一点
当我尝试类似于:
from m in Main.Expand( "Details" )
where m.ID == 57
select new{ m.Property1, m.Details.Property2 }
它给了我一条错误消息:NotSupportedException:在同一查询上指定了显式扩展时无法创建投影
我现在已经放弃使用Linq来构造查询。但是知道了上面这样正确的url,我如何在代码C客户机中直接使用该url,然后如何访问结果?不仅仅是
from m in Main
where m.ID == 57
select new { m.Property1, m.Details.Property2 }
为你工作?不仅仅是
from m in Main
where m.ID == 57
select new { m.Property1, m.Details.Property2 }
为你工作?这对我也很有用。有趣的是,如果在OData请求URL中省略集合的扩展,而在该集合中选择一个字段,则会得到:$select查询选项中只能遍历$expand中指定的属性。所选项目为“BAlgemeen”。。对IQueryable的RequestUri属性的检查显示,在从中选择字段时,$expand=BAlgemeen是自动添加的。这对我也起到了作用。有趣的是,如果在OData请求URL中省略集合的扩展,而在该集合中选择一个字段,则会得到:$select查询选项中只能遍历$expand中指定的属性。所选项目为“BAlgemeen”。。对IQueryable的RequestUri属性的检查显示,在从中选择字段时,$expand=BAlgemeen是自动添加的。