Сортировка списков с подпунктами в C # - PullRequest
4 голосов
/ 09 сентября 2010

Я пытаюсь отсортировать список заказов и предметов на основе самой ранней (самой низкой) даты создания одного из предметов в списке.

Итак, у меня есть:

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

public MyItems
{
DateTime itemcreatedate;
}

Скажем, в Order1 есть два элемента с itemcateateate от 01.06.2010 и 6/15/2010

В Order2 есть два элемента с itemcreateate от 01.04.2010 и 6/10/2010

Мне бы хотелось, чтобы моим отсортированным списком был Order2, Order1

Мой скудный незамерзающий мозг разработчика пещерного человека может видеть итеративный способ грубой силы, чтобы это произошло, но мне интересно, есть ли у кого-нибудьхороший чистый способ.

Ответы [ 2 ]

6 голосов
/ 09 сентября 2010

Попробуйте что-то вроде этого:

List<MyOrder> sortedList = myOrders
    .OrderBy(myOrder => myOrder.OrderItems.Min(myItem => myItem.ItemCreateDate))
    .ToList();
0 голосов
/ 09 сентября 2010

Вот мой (непроверенный!) Код:

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

Эта концепция в некоторой степени похожа на код Марка, но я использую поиск, чтобы избежать многократного вызова метода IEnumerable<>.Min.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...