Используйте LINQ для произвольной сортировки

StackOverflow https://stackoverflow.com/questions/921107

  •  06-09-2019
  •  | 
  •  

Вопрос

Допустим, у нас есть объект с атрибутами 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?
});
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top