Отсортируйте Список по свойству и затем по другому

У меня есть класс в качестве примера, содержащий две точки данных:

public enum Sort { First, Second, Third, Fourth }
public class MyClass
{
    public MyClass(Sort sort, string name) { 
        this.Sort = sort; 
        this.Name = name; 
    }

    public Sort Sort { get; set; }
    public string Name { get; set; }
}

Я надеюсь сортировать их в группы их Sort свойство, и затем располагает в алфавитном порядке те группы.

List<MyClass> list = new List<MyClass>() { 
    new MyClass(MyClass.Sort.Third, "B"), 
    new MyClass(MyClass.Sort.First, "D"),
    new MyClass(MyClass.Sort.First, "A"),
    new MyClass(MyClass.Sort.Fourth, "C"),
    new MyClass(MyClass.Sort.First, "AB"),
    new MyClass(MyClass.Sort.Second, "Z"),
};

Вывод затем был бы: (показ Name)

A
AB
D
Z
B
C

Я смог сделать это при помощи a foreach для разделения объектов на многие меньшие массивы (сгруппированный перечислением значений), но это кажется очень утомительным - и я думаю, что должно быть некоторое решение LINQ, о котором я не знаю.

11
задан caesay 20 November 2017 в 00:58
поделиться

3 ответа

Используя методы расширения, сначала OrderBy перечисление, ThenBy имя.

var sorted = list.OrderBy( m => m.Sort ).ThenBy( m => m.Name );
21
ответ дан 3 December 2019 в 02:52
поделиться

Думаю, это должно сработать

var result = from m in list
             orderby m.Sort, m.Name
             select m;
4
ответ дан 3 December 2019 в 02:52
поделиться

Помимо хороших решений LINQ, вы также можете сделать это с помощью упомянутого вами метода сравнения. Сделайте так, чтобы MyClass реализовал интерфейс IComparable с помощью метода CompareTo , например:

  public int CompareTo(object obj)
  {
      MyClass other = (MyClass)obj;
      int sort = this.srt.CompareTo(other.srt);
      return (sort == 0) ? this.Name.CompareTo(other.Name) : sort;
  }

Вышеупомянутый метод сначала упорядочит ваши объекты по перечислению, а если перечисление значения равны, сравнивает имя. Затем просто вызовите list.Sort () , и он выведет правильный порядок.

5
ответ дан 3 December 2019 в 02:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: