odata - 子派生属性上的 OData v4 $orderby
问题描述
我有以下情况:
public class Stay
{
[Contained]
public Guest PrimaryGuest {get;set;}
}
public abstract class Guest
{
public int ID {get; set;}
}
public class EntityGuest : Guest
{
public string EntityName {get;set;}
}
public class PersonGuest : Guest
{
public string SurName {get;set;}
public string GivenName {get;set;}
}
在查询住宿时,我希望按 PersonGuest/SurName 订购。
我知道如何按子属性排序: [URL]/Stays?$expand=PrimaryGuest&$orderby=PrimaryGuest/ID
-但是我将如何对派生的子属性进行排序?甚至可能吗?我无法通过 OData 文档确定它 - 至少没有为包含的实体调用它。
解决方案
这个答案在类似的情况下帮助了我很多:oData $expand on Derived Types
基本上,您可以使用您为模型定义的命名空间,而不是 .Net 完整类型名称,通过添加正斜杠和模型类型的限定名称,在查询中“转换”任何复杂或实体类型的属性。
[URL]/Stays?$expand=PrimaryGuest&$orderby=PrimaryGuest/ModelNamespace.PersonGuest/Surname
如果您不确定模型命名空间,请查看模型构建器代码,或使用类似以下内容:
ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
builder.Namespace = "MyAppModel";
然后您的 URL 应如下所示:
[URL]/Stays?$expand=PrimaryGuest&$orderby=PrimaryGuest/MyAppModel.PersonGuest/Surname
推荐阅读
- c# - 如何连接 ImageSource 的绑定?
- javascript - 模块构建失败:错误:ENOENT:没有这样的文件或目录 - React
- r - ggplot 不会为数据集中的所有类别级别画线
- java - 在 Java 中实现不同方法的枚举
- javascript - Use glob node.js to know if a file exists in the parent folder using wildcard
- javascript - Braintree js 插入 - 意外令牌
- c# - Angular 与 webAPI
- google-app-engine - Flask app returns a "502: Bad Gateway" because Google Sloud SDK thinks the port is in use (it's [probably] not)
- sql - 相互喜欢的 SQL
- php - 如何将可点击的标签和类别添加到 WordPress 帖子?