子派生属性上的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

最新更新