【发布时间】:2011-09-25 20:28:28
【问题描述】:
我创建了一个公开自托管 OData Web 服务的应用程序。 Web 服务公开了一组名为“Main”的对象。这些 Main 对象中的每一个都有一个对相关“详细信息”对象的引用,该对象非常大(许多属性,将近一百个)。
我现在使用 LinqPad 测试我的 Web 服务,它似乎工作正常。
我经常需要来自“主要”集合和相关“详细信息”对象的信息。这可以通过运行以下 linq 查询来完成:
from m in Main.Expand( "Details" )
where m.ID==57
select m
这对应于网址:
"http://MachineName:port/ServiceName/Main()?$filter=ID eq 57&$expand=Details"
此查询工作正常,并返回完整的 Main 对象和完整的相关 Details 对象。
但是,Details 对象非常大,通常我只需要两个对象中单个属性的值。
我可以手动构建一个 url,它给了我确切的信息:
"http://MachineName/ServiceName/Main()?filter=ID eq 57&$expand=Details&$select=Property1,Details/Property2"
返回的 xml 仅包含 Main.Property1 的值和相关 Details.Property2 的值。
问题:为什么我不能创建一个 linq 查询呢?
当我尝试类似:
from m in Main.Expand( "Details" )
where m.ID == 57
select new{ m.Property1, m.Details.Property2 }
它给了我一条错误消息:“NotSupportedException:在同一查询上指定了显式扩展时无法创建投影。”
我现在已经放弃使用 Linq 来构造查询。但是知道上面的正确 url,我如何直接在代码(C# 客户端)中使用该 url,然后如何访问结果?
【问题讨论】: