Я создаю репозиторий и хотел бы иметь возможность передавать список видов функции, чтобы получить сущности обратно в правильном порядке и, возможно, выгружать страницы.Использовать список сортировки для сортировки запроса
я узнал, что будет правильно LINQ родов, если вы используете обратный список видов и использовать OrderBy для каждого выражения сортировки ..
foreach (var s in sorts.Reverse())
{
query = query.OrderBy(s);
}
Однако при тестировании добавления направления сортировки я обнаружил, что только принимает первое направление сортировки и, похоже, применяет это направление к каждому виду.
private void applySorts(ref IQueryable<TEntity> query, Dictionary<Expression<Func<TEntity, dynamic>>, string> sorts)
{
if (sorts != null)
{
foreach (var s in sorts.Reverse())
{
Expression<Func<TEntity, dynamic>> expr = s.Key;
string dir = s.Value;
if (dir == "d")
{
query = query.OrderByDescending(expr);
}
else
{
query = query.OrderBy(expr);
}
}
}
}
Первоначально я пытался использовать OrderBy на первом роде, а затем перейти к ThenBy, но это не представляется возможным, потому что ThenBy требует типа IOrderedQueryable.
Я хотел бы отметить, что использование словаря может быть не лучшим, если у вас есть идеи, пожалуйста, поделитесь. Тем не менее, я просто хотел запустить его и посмотреть, как все идет.
Я использую C#, Linq и Entity Framework.
Заранее благодарим за ваше время.
Обновление: К сожалению, я обнаружил, что это не поддерживает сортировку чисел. Error (Невозможно бросить тип «System.Int32» к типу 'System.Object.)
Я бы использовал SortedDictionary с ключом, являющимся пользовательским классом, который наследует IComparable, который реализует метод CompareTo(). См. Публикацию: http://stackoverflow.com/questions/4188013/c-sharp-interfaces-how-to-implement-icomparable – jdweng