Ordina un elenco (C #) da molti campi?

Voglio ordinare un elenco di oggetti in C # da molti campi, non solo da uno. Ad esempio, supponiamo di avere una class chiamata X con due attributi, A e B, e ho gli oggetti seguenti, in quest’ordine:

object1 => A = “a”, B = “h”
object2 => A = “a”, B = “c”
object3 => A = “b”, B = “x”
object4 => A = “b”, B = “b”

e voglio ordinare la lista prima per un attributo, e quando sono uguali per l’elemento B, quindi l’ordine sarebbe:

“corrente alternata”
“a” “h”
“b” “b”
“b” “x”

Per quanto ne so, l’ordine del metodo OrderBy di un parametro.

Domanda : Come posso ordinare un elenco C # da più di un campo?

Grazie mille

Usa ThenBy :

Customer.OrderBy(c => c.LastName).ThenBy(c => c.FirstName)

Vedere MSDN: http://msdn.microsoft.com/en-us/library/bb549422.aspx

Sì, puoi farlo specificando il metodo di confronto. Il vantaggio è che l’object ordinato non deve essere compatibile con IComparable

  aListOfObjects.Sort((x, y) => { int result = xACompareTo(yA); return result != 0 ? result : xBCompareTo(yB); }); 

Crea qualcosa come il tuo object

 public class MyObject : IComparable { public string a; public string b; virtual public int CompareTo(object obj) { if (obj is MyObject) { var compareObj = (MyObject)obj; if (this.a.CompareTo(compareObj.a) == 0) { // compare second value return this.b.CompareTo(compareObj.b); } return this.a.CompareTo(compareObj.b); } else { throw new ArgumentException("Object is not a MyObject "); } } } 

si noti inoltre che i ritorni per CompareTo:

http://msdn.microsoft.com/en-us/library/system.icomparable.compareto.aspx

Quindi, se si dispone di un elenco di MyObject, chiamare .Sort () vale a dire

 var objList = new List(); objList.Sort(); 

Il tuo object dovrebbe implementare l’interfaccia IComparable .

Con esso la tua class diventa una nuova funzione chiamata CompareTo(T other) . All’interno di questa funzione è ansible effettuare qualsiasi confronto tra l’object corrente e l’altro e restituire un valore intero circa se il primo è maggiore, minore o uguale al secondo.