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)...