【问题标题】:is it possible to Query an Odata service and expand Child of Child entities?是否可以查询 Odata 服务并扩展子实体的子实体?
【发布时间】:2011-08-15 19:44:10
【问题描述】:

这听起来很简单(也许我在这里遗漏了明显的东西)但我找不到解决方案。我知道我可以查询一个实体并返回一个或多个这样做的直接子实体:

var query = from c in Service.Clients.Expand("Addresses,Comments,PhoneNumbers")..

我想要做的是对 3 个级别(孩子的孩子)做同样的事情,比如说“国家->省->城市”或“品牌->家庭->模特”

我尝试扩展所有实体,但失败了

var query = from c in Service.Brands.Expand("Families,Models").. //fails,
//which even makes some sense, since Models is a Child of Family, not Brand
var query = from c in Service.Brands.Expand("Families").. //this works, 
//but Family.Models is empty

有没有办法在一个查询中执行此操作,还是我必须将其拆分为两个单独的查询?

【问题讨论】:

    标签: linq odata wcf-data-services


    【解决方案1】:

    在 ASP.NET OData v4 中,URL 约定似乎发生了变化。现在是:

    ~/Brands?$expand=Families($expand=Models)
    

    您还可以在子实体中选择所需的内容。
    例如,如果您只需要品牌系列标识符:

    ~/Brands?$expand=Families($select=Id)
    

    此外,如果您只需要品牌系列型号的标识符,您可以这样做:

    ~/Brands?$expand=Families($expand=Models($select=Id))
    

    ...等等。希望这会有所帮助!

    【讨论】:

    • 有人知道如何在 Linq C# 客户端中执行此操作吗?
    • @AndreasFurster 你发现了吗?
    • @LueTm 是的。如果我没记错的话,.Expand(string entity) 方法只是将$expand=<entity param> 添加到 url 查询中。所以你可以这样做:.Expand("Families($expand=Models)")。是的,它有点“有点”难看......但我虽然它会工作。
    • 在 odata v4 中,URL 约定仍然使用斜杠:docs.oasis-open.org/odata/odata/v4.0/errata02/os/complete/…
    • 对于在 oData 的 pre v4 中寻找此功能的任何人,您可以像这样使用它: ?$expand=Families/Models 规范中提到的 odata.org/documentation/odata-version-2-0/uri-conventions
    【解决方案2】:

    以下语句应返回您要查找的内容:

    var query = from c in Service.Brands.Expand("Families/Models")
    

    这将运行以下 odata 查询:

    .../OData.svc/Brands?$expand=Families/Models
    

    Here 是指向更多 odata 文档的链接:

    $expand 查询选项的语法是以逗号分隔的导航属性列表。此外,每个导航属性后面可以跟一个正斜杠和另一个导航属性,以识别多级关系。

    【讨论】:

    • 该死,我已经读过...但很快就将其驳回,因为我不知道他们对“实体图”的含义...#$%$ 非常感谢您的指点我,吉恩
    • 如何选择?
    • 此语法也适用于QueryableExpandAttribute gist.github.com/dbeattie71/7820af9f4ae4f68069207b49fc446c94 [QueryableExpand("GrainBins,GrainBins/GrainBinLevelHistories")]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多