Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq 奥达林克问题_Linq_Odata - Fatal编程技术网

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相对应

我创建了一个公开自托管ODataWeb服务的应用程序。web服务公开名为Main的对象集合。这些主要对象中的每一个都有一个对一个related Details对象的引用,这个对象非常大,有许多属性,将近一百个

我现在使用LinqPad来测试我的web服务,它似乎工作得很好

通常,我需要来自主集合和相关细节对象的信息。这可以通过运行以下linq查询来实现:

 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是自动添加的。