[英]OrderBy with Swedish letters
我有一個自定義類Customer的列表,我想按標題按字母順序對它們進行排序。 所以我寫了
myList = myList.OrderByDescending(x => x.Title).ToList<Customer>();
現在問題是這種方法不支持瑞典方式對字母å,ä,ö進行排序。 它們應該出現在字母z之后的末尾,但它們不會出現。
所以我做了一個解決方法,在排序之前替換了瑞典字母,然后在之后更改它們。 它看起來像這樣,但它很慢。 有人會想到更好的方法嗎?
private List<Customer> OrderBySwedish(List<Customer> myList)
{
foreach (var customer in myList)
{
customer.Title = customer.Title.Replace("å", "zzz1").Replace("ä", "zzz2").Replace("ö", "zzz3").Replace("Å", "Zzz1").Replace("Ä", "Zzz2").Replace("Ö", "Zzz3");
}
myList= myList.OrderBy(x => x.Title).ToList<Customer>();
foreach (var customer in myList)
{
customer.Title = customer.Title.Replace("zzz1", "å").Replace("zzz2", "ä").Replace("zzz3", "ö").Replace("Zzz1", "Å").Replace("Zzz2", "Ä").Replace("Zzz3", "Ö");
}
return myList;
}
您可以使用特定於文化的StringComparer
,請參見此處 。
CultureInfo culture = new CultureInfo("sv-SE");
var result = myList.OrderByDescending(x =>
x.Title, StringComparer.Create(culture, false));
將Thread.CurrentCulture屬性設置為正確的區域性。
我的情況:_我的排序列表有值編碼。 這使我的訂單不正確。 添加解碼解決我的問題!
我發現一個類似問題的解決方法是使用一個輔助字段來保存轉換后的數據版本。
在我的情況下,我們不得不person.Name
和person.SearchName
,其中SearchName
是Name
轉換為沒有變音符號。
但這只是最好的方法(AFAIK),因為我們想要快速的數據庫搜索/過濾,然后只實例化相關結果。
如果你已經有了內存中的對象,我會建議你采用其他方法之一; 而不是這一個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.