如何按对象中的属性对List <T>进行排序

我有一个名为Order的类,它具有OrderIdOrderDateQuantityTotal等属性。 我有这个Order类的列表:

List<Order> objListOrder = new List<Order>();
GetOrderList(objListOrder); // fill list of orders

现在我想根据Order对象的一个​​属性对列表进行排序,例如我需要按订单日期或订单ID对其进行排序。

我如何在C#中执行此操作?


我能想到的最简单的方法是使用Linq:

List<Order> SortedList = objListOrder.OrderBy(o=>o.OrderDate).ToList();

如果您需要就地对列表进行排序,那么您可以使用Sort方法,传递一个Comparison<T>委托:

objListOrder.Sort((x, y) => x.OrderDate.CompareTo(y.OrderDate));

如果您更喜欢创建一个新的排序序列,而不是就地排序,那么您可以使用LINQ的OrderBy方法,如其他答案中所述。


在.Net2.0上不使用LINQ来做到这一点:

List<Order> objListOrder = GetOrderList();
objListOrder.Sort(
    delegate(Order p1, Order p2)
    {
        return p1.OrderDate.CompareTo(p2.OrderDate);
    }
);

如果你使用.Net3.0,那么LukeH的回答就是你要做的。

要对多个属性进行排序,您仍然可以在委托中进行排序。 例如:

orderList.Sort(
    delegate(Order p1, Order p2)
    {
        int compareDate = p1.Date.CompareTo(p2.Date);
        if (compareDate == 0)
        {
            return p2.OrderID.CompareTo(p1.OrderID);
        }
        return compareDate;
    }
);

这会给你升序日期降序 orderIds。

然而,我不会推荐坚持代表,因为这将意味着很多地方没有代码重用。 您应该实现一个IComparer ,并将其传递给您的Sort方法。 看这里。

public class MyOrderingClass : IComparer<Order>
{
    public int Compare(Order x, Order y)
    {
        int compareDate = x.Date.CompareTo(y.Date);
        if (compareDate == 0)
        {
            return x.OrderID.CompareTo(y.OrderID);
        }
        return compareDate;
    }
}

然后使用这个IComparer类,实例化它并将它传递给你的Sort方法:

IComparer<Order> comparer = new MyOrderingClass();
orderList.Sort(comparer);
链接地址: http://www.djcxy.com/p/1917.html

上一篇: How to Sort a List<T> by a property in the object

下一篇: Fastest sort of fixed length 6 int array