如何按对象中的属性对List <T>进行排序
我有一个名为Order
的类,它具有OrderId
, OrderDate
, Quantity
和Total
等属性。 我有这个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