使用C#中的子项对列表进行排序

时间:2010-09-09 15:39:57

标签: c# sorting

我正在尝试根据列表中某个项目的最早(最低)创建日期对订单和商品列表进行排序。

所以我有:

public MyOrder
{
orderid int;
IList<MyItems> orderitems;
}

public MyItems
{
DateTime itemcreatedate;
}

假设Order1在itemcreatedate 6/1/2010和6/15/2010中有两个项目

Order2在itemcreatedate 4/1/2010和6/10/2010

中有两个项目

我希望我的排序列表是Order2,Order1

我的微弱的解冻穴居人开发人员大脑可以看到一种蛮力的迭代方式来实现它,但我想知道是否有人有一个很好的清洁方式。

2 个答案:

答案 0 :(得分:6)

尝试这样的事情:

List<MyOrder> sortedList = myOrders
    .OrderBy(myOrder => myOrder.OrderItems.Min(myItem => myItem.ItemCreateDate))
    .ToList();

答案 1 :(得分:0)

这是我的(未经测试的!)代码:

 List<MyOrder> orders = GetSomeOrders();
 var orderCreateDateMap = orders.ToLookup(order => order.orderitems.Min(o2 => o2.itemcreatedate));
 var sortedGroups = orderCreateDateMap.OrderBy(g => g.Key);
 var sortedOrders = sortedGroups.SelectMany(g => g);

这个概念有点类似于Mark的概念,但是我使用lookup来避免多次调用IEnumerable<>.Min方法。