Sorting lists with subitems in C #

I am trying to sort the list of orders and items based on the earliest (lowest) date of creation of one of the items in the list.

So, I have a:

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

Say Order1 has two elements in it: itemcreatedate 6/1/2010 and 6/15/2010

Order2 has two items in it since itemcreatedate on 4/1/2010 and 6/10/2010

I would like my sorted list to be Order2, Order1

My lean caveman non-freezing brain might see an iterative way of brute force for this to happen, but I wonder if anyone has a good clean way.

+4
source share
2 answers

Try something like this:

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

Here is my (unverified!) Code:

  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); 

The concept is somewhat similar to Mark one, but I use lookup to avoid calling the IEnumerable<>.Min method several times.

0
source

All Articles