Hotchocolate, включить / выключить сортировку по полю в типе

Я открываю свой класс "Пример" с помощью IQuerable и применяю атрибут [UseSorting], чтобы пользователь мог определить порядок сортировки результатов. Это отлично работает, и Playground позволяет мне делать именно это.

    public class QueryType : ObjectType
    {
        [UseSorting]
        public IQueryable<Example> GetExamples([Service]IExampleRepository repository)
        {
            return repository.GetExamples();
        }
    }

    public class ExampleType : ObjectType<Example>
    {
        protected override void Configure(IObjectTypeDescriptor<Example> descriptor)
        {
        }
    }

Но у класса "Example" есть три свойства, и я хочу, чтобы только два из них могли заказываться пользователем. Для пользователя нет смысла заказывать по третьему свойству. Как указать одно из свойств "Пример", которое будет исключено из промежуточного ПО для заказа?

1 ответ

Решение

Предположим, у вас есть Prop1, Prop2 и Prop3, и вы хотите разрешить только сортировку Prop1 и Prop2. Для этого вам просто нужно реализовать тип "сортировка метаданных" следующим образом:

 public class ExampleSortType : SortInputType<Example>
{
    protected override void Configure(ISortInputTypeDescriptor<Example> descriptor)
    {
        ISortInputTypeDescriptor<Example> sortInputTypeDescriptor = descriptor.BindFieldsExplicitly();

        sortInputTypeDescriptor.Sortable(d => d.Prop1);
        sortInputTypeDescriptor.Sortable(d => d.Prop2);
    }
}

и укажите атрибут UseSorting с этим типом метаданных:

[UseSorting(SortType = typeof(ExampleSortType))]
 public IQueryable<Example> GetExamples([Service]IExampleRepository repository)...
Другие вопросы по тегам