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;}
}

При запросе проживания я хочу заказать по персоне-госту/фамилии.

Я знаю, как упорядочить по дочернему свойству: [URL]/Stays?$expand=PrimaryGuest&$orderby=PrimaryGuest/ID, но как мне упорядочить производное дочернее свойство? Это вообще возможно? Я не мог определить это по документации OData - по крайней мере, это не было вызвано для содержащихся объектов.


person DWil    schedule 02.08.2018    source источник


Ответы (1)


Этот ответ очень помог мне в аналогичном сценарии: oData $expand на производных типах

По сути, вы можете «преобразовать» любое сложное свойство или свойство типа сущности в свой запрос, добавив косую черту и полное имя типа model, используя пространство имен, которое вы определили для своей модели, а не .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

person Chris Schaller    schedule 24.03.2019