Сортировка 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 (как и должно изначально), но массив не отсортирован. Код заходит внужную ветку свитя, выходит из нее и ничего. Все на своих местах :(