Я работаю над созданием настраиваемой фильтрации и сортировки набора данных на основе набора полей сортировки, отправленных из клиентского браузера, и использую Dynamic Linq для достижения (большей части) желаемого эффекта. Я сталкиваюсь с проблемой, когда пытаюсь отсортировать по столбцу типа String, который содержит как традиционные строки, так и числа, хранящиеся в виде строк. Похоже, я не могу передать значение перечисления StringComparison или указать параметр IComparer для функции заказа Dynamic Linq.
Мой код сортировки выглядит так:
myList.AsQueryable().OrderBy("StringColWithNums ASC")
Я заканчиваю с:
1
10
100
11
12
2
20
вместо:
1
2
10
11
12
20
100
У кого-нибудь есть опыт создания чего-то подобного?
Кажется, что это не то, что может быть сделано из коробки с Dynamic Linq, по крайней мере, не в .NET 2.0 / 3.5. В итоге я изменил исходный код Dynamic Linq, чтобы выполнить то, что мне было нужно.
myList.AsQueryable().Sort((r, s) => int.Parse(r).CompareTo(int.Parse(s)));
потребует некоторой настройки, если это объекты, просто используйте int.Parse(r.StringColWithNums)
или любое int.Parse(r.StringColWithNums)
поле.
Ой, извините, не прочитал все ОП, чтобы увидеть, что на нем тоже есть буквы, и вы хотите динамический linq, редактирование
РЕДАКТИРОВАТЬ
Я не знаю, что вы сможете сделать это, используя Dynamic linq и передав IComparer. Возможно, вы сможете сделать это после получения результатов (то есть, как я изначально писал, с изменениями). Прокомментируйте, если вы хотите продолжить эту линию.