子项派生属性上的OData v4 $ orderby

问题描述 投票:1回答:1

我有以下场景:

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 odata-v4
1个回答
0
投票

这个答案在类似的场景中给了我很多帮助:oData $expand on Derived Types

基本上,您可以使用为模型定义的命名空间(而不是.Net完整类型名称),通过添加正斜杠和模型类型的限定名称,在查询中“强制转换”任何复杂或实体类型的属性。

[URL]/Stays?$expand=PrimaryGuest&$orderby=PrimaryGuest/ModelNamespace.PersonGuest/Surname

如果您不确定模型名称空间,请查看模型构建器代码,或使用类似于此的内容:

        ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
        builder.Namespace = "MyAppModel";

然后您的网址应如下所示:

[URL]/Stays?$expand=PrimaryGuest&$orderby=PrimaryGuest/MyAppModel.PersonGuest/Surname

© www.soinside.com 2019 - 2024. All rights reserved.