Используйте LINQ для произвольной сортировки - PullRequest
2 голосов
/ 28 мая 2009

Допустим, у нас есть объект, имеющий атрибуты att1 и att2, где att1 может иметь значения a, b, c и att2 может иметь значения 1,2,3. Можно ли использовать LINQ, чтобы мы могли сортировать элементы в коллекции, применяя произвольное правило сортировки без реализации IComparable. Я сталкиваюсь с проблемой, когда бизнес требует, чтобы на некоторых экранах элементы в коллекции сортировались одним способом, а на других - другим. Например, правило может указывать, что элементы должны быть отсортированы так, чтобы сначала был указан «b», затем «a», затем «c», и в каждой группе сначала «3», затем «1», затем «2».

1 Ответ

7 голосов
/ 28 мая 2009

Конечно. Вы можете использовать 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?
});
...