首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Odata v4 - $expand然后奉承结果

Odata v4 - $expand然后奉承结果
EN

Stack Overflow用户
提问于 2016-11-15 17:12:54
回答 1查看 2K关注 0票数 0

目标:与其他道具一起展开对象,并将嵌套的属性投影到根选择上。

有下列关系:

代码语言:javascript
复制
public class Product {
   public string Barcode { get; set; }
   public double Price { get; set; }
   public Category Category { get; set; }
}

public class Category {
   public string Name { get; set; }
}

我想作出预测,结果是:

代码语言:javascript
复制
{
   "@odata.context": "http://localhost/odata/$metadata#Product",
   "value": [
      {
         "Price": 500,
         "Name": "Meat Products" // this is category name, ideally would be to rename it to CategoryName
      }
   ]
}

目前我在哪里得到了这个:

代码语言:javascript
复制
{
   "@odata.context": "http://localhost/odata/$metadata#Product",
   "value": [
      {
         "Price": 500,
         "Category": {
            "Name": "Meat Products"
         }
      }
   ]
}

所使用的查询如下:

/odata/Product?$expand=Category($select=Name)&$select=Price

我希望能写出这样的投影:

/odata/Product?$expand=Category&$select=Price,Category/Name as CategoryName

/odata/Product?$expand=Category&$select=Price,Category($select=Name as CategoryName)

/odata/Product?$expand=Category&$select=Price,Category($select=Name)

这能实现吗?谢谢!

P.S. OData V4.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-21 09:01:45

这在odata v4查询语义上是无法实现的。如您所见,响应体包含一行:

代码语言:javascript
复制
"@odata.context": "http://localhost/odata/$metadata#Product"

这表示整个响应有效负载表示“Product”类型的实例。假设该类型上不存在'CategoryName‘属性,则不可能通过'AS’子句指示动态添加服务。在标准的OData查询规范中,关键字'AS‘也不存在。

但是,返回元数据以外的附加属性确实是有效的,请参阅参考文献

客户端必须准备在实体或复杂类型实例中接收未在元数据中公告的附加属性,即使对于未标记为已打开的类型也是如此。

因此,在这种情况下,服务可以在响应中返回额外的“虚拟”属性“CategoryName”。(如果您是服务所有者,则可以更新响应逻辑并进行更改。)这可能是一种服务行为,而不是对某些客户端查询的反应。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40615799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档