2013-07-25 2 views
0

Nous utilisons nTiers et j'ai cette liste d'objets que j'ai besoin de trier par une propriété, mais puis par une autre propriété, j'ai ce qui suit, mais je ne comprends pas comment le ThenBy , J'ai vu des exemples avec List<object> mais pas avec TList<object>.Tri TList <object> (ntiers) avec ThenBy

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

mais j'ai besoin de faire le tri par le ClientName. J'ai vu un exemple dans un autre poste en utilisant LINQ, mais je ne peux pas obtenir que cela fonctionne comme ça (exemple ci-dessous), ce qui me permettrait de faire un ThenBy

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

Répondre

1

Vous pouvez utiliser la classe Comparison avec 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; 
    }) 
); 

(Dans l'exemple ci-dessus, la gestion des valeurs NULL est ignorée, mais il doit être inclus dans un vrai travail).

1

Vous devez appeler ThenBy<Client>avant vous appelez ToList<Client> :

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

ThenBy<T> fonctionne uniquement sur IOrderedEnumerable<T> de IOrderedEnumerable<T> s sont le type de retour de OrderBy<T>, mais une fois que vous appelez ToList<T>, ce n'est plus un IOrderedEnumerable<T>, mais un List<T> et List<T> n'implémente pas IOrderedEnumerable<T>.

Questions connexes