У меня есть Объект списка, который включает 3 объекта: Неравнодушный, Полный До H и Полный До O.
Я связываю этот список с asp OptionButtonList, и он сортирует его в алфавитном порядке. Однако я хочу отсортировать список как следующее:
Полный до H, неравнодушного, полного до O.
Как я могу выполнить это?
Linq отлично подходит для этого. Вы даже можете построить последовательность порядка, чтобы определять ее на лету, поскольку выполнение сортировки не выполняется до ToList
.
var sortedList = yourList.OrderBy(i => i.FullToH).
ThenBy(i => i.Partial).
ThenBy(i => i.FullToO).ToList();
Являются ли перечисленные вами элементы (например, FullToHo) просто строками? Если это так, то все, что вам нужно сделать, это написать метод для сравнения и сортировки с помощью этого метода.
public int CompareEntries(string left, string right) {
const string fullToH = "Full To H";
const string partial = "Partial";
const string fullToO = "Full To O";
if ( left == right ) {
return 0;
} else if ( left == fullToH ) {
return -1;
} else if ( left == fullToO ) {
return 1;
} else if ( right == fullToH ) {
return 1;
} else {
return -1;
}
}
list.Sort(CompareEntries);
Реализуйте IComparer для своих объектов.
Предположим, что ваш список не
List<object> myList = new List<object>();
а что-то вроде
List<MyObjectClass> myList = new List<MyObjectClass>();
(где каждый элемент имеет один и тот же тип объекта)
Вы можете сделать вот что:
myList.Sort((firstObj, secondObj) =>
{
return firstObj.SomeProperty.CompareTo(secondObj.SomeProperty);
}
);
Создайте Comparer для вашего пользовательского типа (который реализует интерфейс IComparer). Затем вы можете использовать его для сортировки списка:
List<CustomType> list = new List<CustomType>();
// Fill list
list.Sort(new CustomComparer());
Или, если вы используете более новую версию фреймворка и вам не нужно повторно использовать логику сортировки, вы можете использовать метод IEnumerable
.
Спасибо всем за помощь!
Я сделал вот так:
List<string> sortedList = new List<string>();
sortedList = list.OrderBy(i => i.CodeValue == "FullToH").ThenBy(i => i.CodeValue == "Partial").ThenBy(i => i.CodeValue == "FullToO").ToList();
Затем привязал к sortedList!