带有瑞典字母的 OrderBy

Posted

技术标签:

【中文标题】带有瑞典字母的 OrderBy【英文标题】:OrderBy with Swedish letters 【发布时间】:2011-11-05 23:09:37 【问题描述】:

我有一个自定义类 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;
    

【问题讨论】:

【参考方案1】:

您可以使用特定于文化的StringComparer,请参阅here。

CultureInfo culture = new CultureInfo("sv-SE");
var result = myList.OrderByDescending(x => 
               x.Title, StringComparer.Create(culture, false));

【讨论】:

【参考方案2】:

将Thread.CurrentCulture 属性设置为正确的区域性。

【讨论】:

【参考方案3】:

我的情况: _我的排序列表有值被编码。这使我的订单不正确。添加解码解决我的问题!

【讨论】:

【参考方案4】:

我发现的一个有点类似问题的解决方法是有一个辅助字段来保存数据的转换版本。 在我的例子中,我们有person.Nameperson.SearchName,其中SearchNameName 转换为没有变音符号。

但这只是最好的方法 (AFAIK),因为我们想要快速的数据库搜索/过滤,然后只实例化相关结果。 如果您已经在内存中有对象,我建议您使用其他方法之一;而不是这个。

【讨论】:

以上是关于带有瑞典字母的 OrderBy的主要内容,如果未能解决你的问题,请参考以下文章

MacOS wc(wordcount)计算带有UTF-8字符Å的错误单词

Windows 上的 UTF-8/ISO-8859-1 编码问题 --> Unix

Mapkit 显示注释区域

瑞典 PC 上的程序员可以不编写涉及名为 V 和 W 的变量的 T-SQL 查询吗?

如何不将英文字母传递给Json

MySql操作「数据查询条件20211223