订单用瑞典字母
我有一个自定义类Customer的列表,我想按标题按字母顺序对它们进行排序。 所以我写了
myList = myList.OrderByDescending(x => x.Title).ToList();
现在问题是这种方法不支持瑞典方式对字母å,ä,ö进行排序。 它们应该出现在字母z之后的末尾,但它们不会出现。
所以我做了一个解决方法,在排序之前替换了瑞典字母,然后在之后更改它们。 它看起来像这样,但它很慢。 有人会想到一个更好的方法吗?
private List OrderBySwedish(List 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(); 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属性设置为正确的区域性。
我的情况:_我的排序列表有值编码。 这使我的订单不正确。 添加解码解决我的问题!
我找到一个类似问题的解决方法是使用一个辅助字段来保存转换后的数据版本。
在我的例子中,我们有SearchName
和SearchName
,其中SearchName
被Name
转换为没有变音符号。
但这只是最好的方法(AFAIK),因为我们想要一个快速的数据库搜索/过滤,然后只实例化相关结果。
如果你已经有了内存中的对象,我会建议你采用其他方法之一; 而不是这个。