2017-10-19 88 views
1

的字符串我有一個String類型的CourseNrDataTable具有以下值:排序DataTable中包括整數和字符數

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

我想排序CourseNr列(在ASC順序整數)和(在ASC個字符字母順序排序)如下:

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

我知道可以有很多可行的建議來解決這個問題,但我需要一些最可能的方法來實現這一目標?

+0

那麼你已經嘗試過的一些方法,然後我們可以幫助解決這個問題 –

+0

按照什麼順序排列「X9」和「X10」? –

+0

它無論如何,只是按字母順序排列,如果它的整數和字符組合如:「PHD45」 – SPBeginer

回答

1

您可以使用Windows的內置自然排序(如F.E.文件進行排序)StrCmpLogicalW

比較兩個Unicode字符串。字符串中的數字被視爲數字內容而不是 文本。此測試不區分大小寫。

[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); 
    } 
} 

然後代碼排序的DataTable很容易與LINQ:

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

(學分NaturalStringComparer到:https://stackoverflow.com/a/248613/284240

+0

這是最好的方法!謝謝蒂姆 – SPBeginer

相關問題