LINQ - Сортировать список объектов, используя OrderBy EnumValue и набор результатов Union? - PullRequest
3 голосов
/ 15 июля 2009

Привет! Я хочу использовать LINQ, чтобы запросить список объектов и отсортировать их по значению перечисления, строковому значению, а затем объединить остальную часть списка, отсортированного аналогичным образом для новичка LINQ, поэтому будьте осторожны.

//CTOR for my class
MyClass(id, "Name Value Here", Enum.EnumValueHere);

Я создаю список этих объектов и хочу по-разному отсортировать их таким образом, чтобы все элементы с Enum.EnumValue [X] показывались первыми в списке, отсортированы по имени, а затем все остальные элементы, отсортированные аналогичным образом как объединение наборов результатов в SQL)

//What I have so far (only sorts the list)
List<MyClass> = (from s in MyClass orderby s.EnumValue, s.NameValue  select s).ToList();

Кто-нибудь из Гуру может поделиться магией LINQ?

Спасибо!

Ответы [ 2 ]

10 голосов
/ 15 июля 2009

Не совсем точно, что вы имеете в виду, но не могли бы вы использовать что-то подобное?

// Using Color as enum just to make things clearer
class ClassyClass
{
    public string Name {get; private set;}
    public Color Color {get; private set;}
    public ClassyClass(id, string name, Color color) { ... }
}


var orderedList = collectionOfClassyClasses
            .OrderBy(x => x.Color != Color.Red) // False comes before true
            .ThenBy(x => x.Color)
            .ThenBy(x => x.Name)
            .ToList();

Если бы collectionOfClassyClasses был чем-то вроде коллекции ClassyClass объектов, то orderedList было бы упорядочено так, чтобы все те, у которых для Color установлено значение Red, были бы первыми, упорядоченными по имени, а затем все остальные, упорядоченные по цвету а потом имя. По крайней мере, я думаю, что это ... не проверило бы это: p Дайте мне знать, если это не так, хе-хе.

0 голосов
/ 15 июля 2009

Вы можете взять первый список и сделать список. AddRange (), который принимает неисчислимо.

...