Используйте LINQ для произвольной сортировки
Вопрос
Допустим, у нас есть объект с атрибутами att1 и att2, где att1 может иметь значения a,b,c, а att2 может иметь значения 1,2,3.Можно ли использовать LINQ, чтобы мы могли сортировать элементы в коллекции, применяя произвольное правило сортировки без реализации IComparable.Я столкнулся с проблемой, когда бизнес требует, чтобы на некоторых экранах элементы коллекции сортировались одним способом, а на других экранах - другим способом.Например, правило может гласить, что элементы необходимо отсортировать так, чтобы сначала было указано «b», затем «a», затем «c», и в каждой группе сначала было «3», затем «1», затем «2».
Решение
Конечно.Вы можете использовать OrderBy
с предикатом, который возвращает более или менее любой произвольный «порядок сортировки», который вам нравится.Например:
objectsWithAttributes.OrderBy(x =>
{
// implement your "rules" here -- anything goes as long as you return
// something that implements IComparable in the end. this code will sort
// the enumerable in the order 'a', 'c', 'b'
if (x.Attribute== 'a')
return 0;
else if (x.Attribute== 'c')
return 1;
else if (x.Attribute== 'b')
return 2;
}).ThenBy(x =>
{
// implement another rule here?
});