我正在尝试根据列表中某个项目的最早(最低)创建日期对订单和商品列表进行排序。
所以我有:
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
我的微弱的解冻穴居人开发人员大脑可以看到一种蛮力的迭代方式来实现它,但我想知道是否有人有一个很好的清洁方式。
答案 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
方法。