Сортировка C# Asp,Net Web API

Всем привет. Пытаюсь сделать сортировку на беке (C# Web API)

Возник вопрос... Когда я делаю сортировку таким образом, то все раотает :

 var dataForSort = result.Value.Select(x => new BlackList
        {
            ItemId = x.Id,
            LastName = x.LastName,
            FirstName = x.FirstName,
            MiddleName = x.MiddleName,
            PhoneNumber = x.PhoneNumber,
            CreateDate = x.CreateDate,
        }).ToList().ByOrder(x=>x.CreateDate);

Если же я добавляю switch и хочу чтобы у меня была та сортировка запрос на которую приходит с фронта, то начинаются проблемы

 switch (request.SortBy)
        {
            case "LastName":
                dataForSort.OrderBy(x => x.LastName);
                break;
            case "LastNameDecs":
                dataForSort.OrderByDescending(x => x.LastName);
                break;
            case "FirstName":
                dataForSort.OrderBy(x => x.FirstName);
                break;
            case "FirstNameDesc":
                dataForSort.OrderByDescending(x => x.FirstName);
                break;
            case "MiddleName":
                dataForSort.OrderBy(x => x.MiddleName);
                break;
            case "MiddleNameDesc":
                dataForSort.OrderByDescending(x => x.MiddleName);
                break;
            case "PhoneNumber":
                dataForSort.OrderBy(x => x.PhoneNumber);
                break;
            case "PhoneNumberDesc":
                dataForSort.OrderByDescending(x => x.PhoneNumber);
                break;
            case "CreateDate":
                dataForSort.OrderBy(x => x.CreateDate);
                break;
            case "CreateDateDesc":
                dataForSort.OrderByDescending(x => x.CreateDate);
                break;
        }

Уточню. Проблема скорее всего в привидении типов. На сколько знаю OrderBy приводит к типу IOrderedEnumerable<>. Если я указываю тип сортировки сразу без свитча, то тип приводится и результат можно нормально вернуть на фронт.

Но , когда я делаю то же самое в теле свитча, то в return есть ошибка привидения типов List в IOrderedEnumerable. Я делаю явное приведение в return, что не требовалось когда, я делал сортировку без свитча и ошибок нет. НО... Фронт не может получить теперь данные. Получаю статус код 500.

Подскажите как корректно реализовать сортировку ? Handler целиком:

public class GetBlackListQueryHandler : IRequestHandler<GetBlackListRequest, IOrderedEnumerable<BlackList>>
{
    //readonly ILogger logger;
    readonly IReadonlyRepository<BlackListEntity> _readonlyRepository;
    public GetBlackListQueryHandler(
        //ILogger logger, 
        IReadonlyRepository<BlackListEntity> readonlyRepository)
    {
        //this.logger = logger/*;*/
        _readonlyRepository = readonlyRepository;
    }

    public async Task<IOrderedEnumerable<BlackList>> Handle(GetBlackListRequest request, CancellationToken cancellationToken)
    {
        //IOrderedEnumerable<BlackList> returned;
        var result = await _readonlyRepository.GetAsync(cancellationToken);
        var dataForSort = result.Value.Select(x => new BlackList
        {
            ItemId = x.Id,
            LastName = x.LastName,
            FirstName = x.FirstName,
            MiddleName = x.MiddleName,
            PhoneNumber = x.PhoneNumber,
            CreateDate = x.CreateDate,
        }).ToList();
        switch (request.SortBy)
        {
            case "LastName":
                dataForSort.OrderBy(x => x.LastName);
                break;
            case "LastNameDecs":
                dataForSort.OrderByDescending(x => x.LastName);
                break;
            case "FirstName":
                dataForSort.OrderBy(x => x.FirstName);
                break;
            case "FirstNameDesc":
                dataForSort.OrderByDescending(x => x.FirstName);
                break;
            case "MiddleName":
                dataForSort.OrderBy(x => x.MiddleName);
                break;
            case "MiddleNameDesc":
                dataForSort.OrderByDescending(x => x.MiddleName);
                break;
            case "PhoneNumber":
                dataForSort.OrderBy(x => x.PhoneNumber);
                break;
            case "PhoneNumberDesc":
                dataForSort.OrderByDescending(x => x.PhoneNumber);
                break;
            case "CreateDate":
                dataForSort.OrderBy(x => x.CreateDate);
                break;
            case "CreateDateDesc":
                dataForSort.OrderByDescending(x => x.CreateDate);
                break;
        }
        return (IOrderedEnumerable<BlackList>)dataForSort;
      
    }
}

Иными словами. Без свитча возвращаетсяIOrderedEnumerable. И сортировка работает. С сортировкой возращается List (как и должно изначально), но массив не отсортирован. Код заходит внужную ветку свитя, выходит из нее и ничего. Все на своих местах :(


Ответы (0 шт):