2013-07-25 2 views
0

Мы используем nTiers, и у меня есть этот список объектов, которые мне нужно отсортировать по свойству, но затем другим свойством, у меня есть следующее, но я не могу понять, как добраться до ThenBy , Я видел примеры с List<object>, но не с TList<object>.Сортировка TList <object> (ntiers) с ThenBy

TList<Client> clients = service.GetClientsById(cid); 
clients.Sort("ClientOrder"); 

но тогда мне нужно отсортировать его по ClientName. Я видел пример в другом посте с помощью LINQ, но я не могу заставить это работать так (пример ниже), что позволило бы мне сделать ThenBy

List<Order> SortedList = objListOrder.OrderBy(o=>o.OrderDate).ToList(); 

ответ

1

Вы можете использовать Comparison класс с List.Sort:

clients.Sort(new Comparison<Client>(
    (client1, client2) => 
    { 
     // compare dates 
     int result = client1.OrderDate.CompareTo(client2.OrderDate); 
     // if dates are equal (result = 0) 
     if(result == 0) 
      // return the comparison of client names 
      return client1.ClientName.CompareTo(client2.ClientName); 
     else 
      // otherwise return dates comparison 
      return result; 
    }) 
); 

(В приведенном выше примере, обработки нулевых значений пропускается, но он должен быть включен в реальной работе).

1

Вам нужно позвонить ThenBy<Client>перед тем вы звоните ToList<Client> :

List<Order> sortedList = 
    clients.OrderBy(o => o.ClientOrder) 
      .ThenBy(o => o.ClientName) 
      .ToList(); 

ThenBy<T> работает только на IOrderedEnumerable<T> сек IOrderedEnumerable<T> с являются тип возвращаемого из OrderBy<T>, но как только вы звоните ToList<T>, это не IOrderedEnumerable<T>, но List<T> и List<T> не реализует IOrderedEnumerable<T>.

Смежные вопросы