Упорядочить список (C#) по многим полям? [дубликат]



этот вопрос уже есть ответ здесь:



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



object1 = > A = "a", B = "h"

объект2 => А = "А", " Б " = "с"

object3 => A = "b", B = "x"

object4 => A = "b", B = "b"



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



"a" "c"

"a" "h"

"б" "б"

"б", "х"



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



вопрос: Как я могу заказать список C# по нескольким полям?



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

669   4  

4 ответов:

использовать ThenBy:

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

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

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

   aListOfObjects.Sort((x, y) =>
   {
       int result = x.A.CompareTo(y.A);
       return result != 0 ? result : x.B.CompareTo(y.B);
   });

сделать ваш объект что-то вроде

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, позвоните .Сортировать (), т. е.

var objList = new List<MyObject>();
objList.Sort();

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

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

Comments

    Ничего не найдено.