2017-01-06 4 views
0

Ich habe eine Liste von Strings:LINQ-Abfrage zu sortieren Liste von numerischen Strings mit NULLs

6, 5, 11, 1, 10, 3, NULL, NULL 

ich eine LINQ-Abfrage müssen sortieren/orderby so bekomme ich diese:

1, 5, 6, 10, 11, NULL, NULL 

I don Ich möchte die Liste nicht konvertieren. Das funktioniert fast:

list myList = myList.OrderBy(x => int.Parse(x)).ToList(); 

Aber die NULLs brechen es. Ich bin sicher, das ist einfach, aber TIA.

  • Verwendung von C#
+0

haben Sie vielleicht einfach etwas versuchen wie: list myList = myList.Where (item => item! = Null) .OrderBy (x => int.Parse (x)). ToList(); ODER Liste myList = myList.OrderBy (x => int.Parse (x ?? 0)). ToList(); –

+1

Warum verwenden Sie Zeichenfolgen anstelle von 'int?' –

Antwort

1

haben Sie vielleicht nur versuchen, so etwas wie:

list myList = myList.Where(item=>item!=null).OrderBy(x => int.Parse(x)).ToList(); 

ODER

list myList = myList.OrderBy(x => int.Parse(x ?? 0)).ToList(); 
+0

Ihr erster Vorschlag ist, was ich hätte, aber ich bekomme eine Ausnahme: "Eingabezeichenfolge war nicht in einem korrekten Format". – Yabbie

+0

Ugh, gleich mit dem zweiten Weg. Nicht sicher, was los ist :( – Yabbie

+1

mmm können Sie überprüfen, doppelte Werte in Ihrer Liste? .. Sind Sie sicher, die Werte sind 6, 5, 11, 1, 10, 3, Null, Null? –

0
string[] xs = new[] { "6", "5", "11", "1", "10", "3", null, null }; 
IOrderedEnumerable<string> myList = xs.OrderBy(x => int.Parse(x ?? $"{int.MaxValue}")).ToList(); 

Wie Sie null s nach taub sein wollen Er verwendet für diesen Fall nur den maximalen int-Wert. Da Ihr Werttyp string ist, verwenden Sie die interpolierte Zeichenfolge, um int.MaxValue als Zeichenfolge zu übergeben.

?? gibt den rechten Ausdruck zurück, wenn der linke Ausdruck null ergibt.

Interpolierte Strings sind sehr ordentlich .Net-Funktion: https://msdn.microsoft.com/en-us/library/dn961160.aspx.

Sie könnten auch string.IsNullOrEmpty, verwenden string.IsNullOrWhiteSpace oder int.TryParse dann int.Parse, in Ihrer Anfrage, je nach Ihren Daten, um erfolgreich zu garantieren Parsen (und somit der Bestellung) aller Elemente.

Verwandte Themen