Заказать Список (C#) многими полями? [дубликат]

Этот вопрос уже имеет ответ здесь:

Я хочу заказать Список объектов в C# многими полями, не только одним. Например, давайте предположим, что у меня есть класс, названный X с двумя Атрибутами, A и B, и у меня есть следующие объекты в том порядке:

object1 => =, B = "h"
object2 => =, B = "c"
object3 => = "b", B = "x"
object4 => = "b", B = "b"

и я хочу заказать список атрибутом сначала, и когда они, равняется, элементом B, таким образом, порядок был бы:

"a" "c"
"a" "h"
"b" "b"
"b" "x"

Насколько я знаю, порядок метода OrderBy одним параметром.

Вопрос: Как я могу заказать Список C# больше чем одним полем?

Большое спасибо

91
задан David Neale 25 May 2010 в 14:32
поделиться

4 ответа

Используйте ThenBy :

Customer.OrderBy (c => c.LastName) .ThenBy (c => c.FirstName )

См. MSDN: http://msdn.microsoft.com/en-us/library/bb549422.aspx

262
ответ дан 24 November 2019 в 06:38
поделиться

Сделайте свой объект чем-то вроде

public class MyObject : IComparable
{
    public string a;
    public string b;

    virtual public int CompareTo(object obj)
    {
        if (obj is MyObject)
        {
            var compareObj = (MyObject)obj;
            if (this.a.CompareTo(compareObj.a) == 0)
            {
                // compare second value
                return this.b.CompareTo(compareObj.b);
            }
            return this.a.CompareTo(compareObj.b);
        }
        else
        {
            throw new ArgumentException("Object is not a MyObject ");
        }
    }
}

, также обратите внимание, что результаты для CompareTo:

http://msdn.microsoft.com/en-us /library/system.icomparable.compareto.aspx

Затем, если у вас есть список MyObject, вызовите .Sort (), т.е.

var objList = new List<MyObject>();
objList.Sort();
8
ответ дан 24 November 2019 в 06:38
поделиться

Ваш объект должен реализовывать Интерфейс IComparable .

С его помощью ваш класс становится новой функцией с именем CompareTo (T other) . В этой функции вы можете произвести любое сравнение между текущим и другим объектом и вернуть целочисленное значение о том, больше ли первое, меньше или равно второму.

0
ответ дан 24 November 2019 в 06:38
поделиться

Да, вы можете сделать это, указав метод сравнения. Преимущество в том, что сортируемый объект не обязательно должен быть IComparable

   aListOfObjects.Sort((x, y) =>
   {
       int result = x.A.CompareTo(y.A);
       return result != 0 ? result : x.B.CompareTo(y.B);
   });
32
ответ дан 24 November 2019 в 06:38
поделиться
Другие вопросы по тегам:

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