【问题标题】:How to access properties of complex type in OData如何在 OData 中访问复杂类型的属性
【发布时间】:2021-09-09 16:59:16
【问题描述】:

我们如何形成一个 OData 查询来访问 ProductDTO 类中复杂属性 ProductDetailsName 属性?

public class ProductDTO
{
    public int Id { get; set; }
    public string ProductName { get; set; }
    public string Description { get; set; }
    public ProductDetails ProductDetails { get; set; }
}

public class ProductDetails
{
    public string Name { get; set; }
    public string Price { get; set; }
    public string Discount { get; set; }
    public string ManufacturedDate { get; set; }
}

这个查询给了我 ProductDetails:

/Products?$select=ProductDetails

{"@odata.context":"http://localhost:59909/$metadata#Products(ProductDetails)","value":[{"ProductDetails":{"Name":"Laptop","Price":"100299" ,"折扣":"1000","制造日期":"12:01:2016 09:30:875"}}]}

【问题讨论】:

  • 您在寻找“/Products?$expand=ProductDetails($select=Name)”吗?
  • 是的,但这不起作用,因为 ProductDetails 不是导航属性。
  • 看起来:应该与 $expand 一起使用,但实现会抛出“不支持”。不过,那是 V3 参考。 stackoverflow.com/questions/20137681/…

标签: odata


【解决方案1】:

根据this post,这对于$select 是不可能的。但是,目前尚不清楚您要从问题中实现什么,所以我想我会发布这个以防万一。对于单个对象,您可以像这样获取嵌套属性的值,下面是使用 TripPin 示例 OData 服务的示例:http://services.odata.org/V4/TripPinServiceRW/Airports('KLAX')/Location/Address/$value 这里,Location 属性是一个复杂类型,我们只获取该对象的Address 属性。

【讨论】:

    【解决方案2】:

    尝试使用 $expand 子句

    在我的情况下,我必须先添加一个 complexType:

    builder.ComplexType<BalanceSheet>();
    

    另外我发现应该使用不同的查询来获取 UI 上的复杂类型

    而不是调用 http://url/api/AccountDetails?$select=name,accountNumber,balance 应该使用另一个 url: http://url/api/AccountDetails?$select=name,accountNumber,balance&$expand=balance

    你只能通过 $expand 看到复杂的属性,比如 balance

    另外,打开 $expand 功能也很重要。为此,请在添加 edm 模型之前添加它:

    endpoints.Select().Expand().Filter().OrderBy().Count().MaxTop(10);
                endpoints.MapODataRoute("odata", "odata", this.GetEdmModel());
    

    在此处查看详细信息:https://stackoverflow.com/a/55476645/2050539

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-04
      • 2013-12-03
      • 2013-05-26
      相关资源
      最近更新 更多