目标:与其他道具一起展开对象,并将嵌套的属性投影到根选择上。
有下列关系:
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; }
}我想作出预测,结果是:
{
"@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
}
]
}目前我在哪里得到了这个:
{
"@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.
发布于 2016-11-21 09:01:45
这在odata v4查询语义上是无法实现的。如您所见,响应体包含一行:
"@odata.context": "http://localhost/odata/$metadata#Product"这表示整个响应有效负载表示“Product”类型的实例。假设该类型上不存在'CategoryName‘属性,则不可能通过'AS’子句指示动态添加服务。在标准的OData查询规范中,关键字'AS‘也不存在。
但是,返回元数据以外的附加属性确实是有效的,请参阅参考文献。
客户端必须准备在实体或复杂类型实例中接收未在元数据中公告的附加属性,即使对于未标记为已打开的类型也是如此。
因此,在这种情况下,服务可以在响应中返回额外的“虚拟”属性“CategoryName”。(如果您是服务所有者,则可以更新响应逻辑并进行更改。)这可能是一种服务行为,而不是对某些客户端查询的反应。
https://stackoverflow.com/questions/40615799
复制相似问题