2017-10-19 1 views
1

Ich habe eine DataTable mit Spalte CourseNr vom Typ String mit folgenden Werten:Sortierung Datatable besteht aus Reihe von ganzen Zahlen und Chars

"121" 
"111" 
"108" 
"122" 
"BH20" 
"PHD45" 
"ADH90" 

I CourseNr Säule (Integers in ASC Reihenfolge) und (Chars in ASC sortieren möchten alphabetischer Reihenfolge) wie folgt aus:

"108" 
"111" 
"121" 
"122" 
"ADH90" 
"BH20" 
"PHD45" 

ich es weiß, dass viele mögliche Vorschläge, diese zu lösen sein kann, aber ich brauche etwas bestmöglichen Ansatz, um dies zu erreichen?

+0

einigen Ansatz Also, was Sie versucht haben und wir dann kann helfen, es zu beheben –

+0

In welcher Reihenfolge sollte "X9" und "X10" sortiert werden? –

+0

Es ist egal, nur in alphabetischer Reihenfolge, wenn es eine Mischung aus Ints und Zeichen wie: "PHD45" – SPBeginer

Antwort

1

Sie können die Fenster-builtin natürlichen Art verwenden (wie F. E. Dateien geordnet) StrCmpLogicalW:

Vergleicht zwei Unicode-Strings. Ziffern in den Strings werden als numerischer Inhalt und nicht als Text betrachtet. Dieser Test unterscheidet nicht zwischen Groß- und Kleinschreibung.

[SuppressUnmanagedCodeSecurity] 
internal static class SafeNativeMethods 
{ 
    [DllImport("shlwapi.dll", CharSet = CharSet.Unicode)] 
    public static extern int StrCmpLogicalW(string psz1, string psz2); 
} 

public sealed class NaturalStringComparer : IComparer<string> 
{ 
    public int Compare(string a, string b) 
    { 
     return SafeNativeMethods.StrCmpLogicalW(a, b); 
    } 
} 

der Code Dann ist die DataTable zu sortieren mit LINQ einfach:

table = table.AsEnumerable() 
    .OrderBy(r => r.Field<string>("CourseNr"), new NaturalStringComparer()) 
    .CopyToDataTable(); 

(Kredite für NaturalStringComparer zu: https://stackoverflow.com/a/248613/284240)

+0

Dies ist der bestmögliche Weg! Danke Tim – SPBeginer

Verwandte Themen