【问题标题】:How to perform an ODATA expand in LinqPad如何在 LinqPad 中执行 ODATA 扩展
【发布时间】:2012-06-30 09:26:39
【问题描述】:

我正在使用 LINQPad 连接到本地 CRM 组织上的 ODATA 服务,但我不知道如何使用 LINQPad 执行“连接”或遍历关系。

这是我的网址

OrganizationData.svc/New_locationSet?$select=new_state_new_location/new_Region$expand=new_state_new_location

在浏览器中运行良好。这是我在 LINQPad 中所做的:

from l in new_locationSet
from s in l.new_state_new_location
select s.new_Region

但我收到一个错误:

An expression of type 'LINQPad.User.New_state' is not allowed in a subsequent from clause in a query expression with source type 'System.Data.Services.Client.DataServiceQuery<LINQPad.User.New_location>'.  Type inference failed in the call to 'SelectMany'.

有什么想法吗?我发现 LINQPad OData 文档非常缺乏......

【问题讨论】:

    标签: dynamics-crm-2011 odata linqpad


    【解决方案1】:

    你只需要投射出你想要扩展的东西,例如:

    from p in Products
    select new {p.Name, CategoryName = p.Category.Name}
    

    Products.Select(p => new { p.Name, CategoryName = p.Category.Name})
    

    将产生

    http://services.odata.org/(S(readwrite))/OData/OData.svc/Products()?$expand=Category&$select=Name,Category/Name
    

    在 LinqPad 的请求日志选项卡中。

    【讨论】:

    • 所以基本上因为 odata 有一个单独的数据集,它可以使用(即你不能做 Odata.svc/Products()Categories()?...),你必须构建你的使用单个“来自”数据集的 LINQ 查询并将连接作为投影放入选择中?而且由于 odata 已经定义了所有关系,它会自动连接它吗?
    • 是的 - 非常正确。在 URL 中没有连接(因为有导航属性,所以不需要它们),客户端 LINQ to URL 翻译器试图非常聪明地处理这些事情,并且可能将一些连接识别为导航,但目前它非常有限(主要是因为它不知道或没有外键)。一个有用的图片是将 OData 想象为对象图,并且查询在该图中定义了您要返回的树。这与您拥有表并且查询定义矩阵的关系数据库非常不同。
    猜你喜欢
    • 1970-01-01
    • 2018-08-17
    • 2011-02-11
    • 1970-01-01
    • 1970-01-01
    • 2011-04-03
    • 1970-01-01
    • 1970-01-01
    • 2015-09-23
    相关资源
    最近更新 更多