Linq按国家字符集排序

Linq按国家字符集排序,linq,internationalization,generic-list,Linq,Internationalization,Generic List,我有一个列表,我在一个属性上按字母顺序排列 不幸的是,数据库设置(我猜)在获取数据时没有正确处理国家字符。尽管如此,我无法更改它(不是我的数据库),因此我需要在这个特定的问题上直接解决这个问题。因此,我简化了下面的例子 var x1 = new Shop() {city = "Århus"}; var x2 = new Shop() { city = "Ans" }; var x3 = new Shop() { city =

我有一个列表,我在一个属性上按字母顺序排列

不幸的是,数据库设置(我猜)在获取数据时没有正确处理国家字符。尽管如此,我无法更改它(不是我的数据库),因此我需要在这个特定的问题上直接解决这个问题。因此,我简化了下面的例子

            var x1 = new Shop() {city = "Århus"};
            var x2 = new Shop() { city = "Ans" };
            var x3 = new Shop() { city = "Balle" };

            list.Add(x1);
            list.Add(x2);
            list.Add(x3);
            list = list.OrderBy(a => a.city).ToList();

            //Result:
            // Århus, Ans, Balle
            // Should be:
            // Ans, Balle, Århus
这些评论应该可以解释我的问题:“Å”是丹麦字符集中的最后一个字母

我无法控制应用程序设置,但我可以强制OrderBy使用特定字符集进行订购吗

提前感谢,


Steen Pedersen

您可以在订购时指定区域性。例如:

class Program
{
    static void Main()
    {
        // Set Denmark as current culture
        Thread.CurrentThread.CurrentCulture = new CultureInfo("da-DK");
        var cities = new[] { "Århus", "Ans", "Balle" };

        // When ordering the cities indicate that you want to 
        // take the current culture into account
        cities = cities.OrderBy(a => a, StringComparer.CurrentCulture).ToArray();

        foreach (var city in cities)
        {
            Console.WriteLine(city);
        }
    }
}
印刷品:

Ans
Balle
Århus

您可以在订购时指定区域性。例如:

class Program
{
    static void Main()
    {
        // Set Denmark as current culture
        Thread.CurrentThread.CurrentCulture = new CultureInfo("da-DK");
        var cities = new[] { "Århus", "Ans", "Balle" };

        // When ordering the cities indicate that you want to 
        // take the current culture into account
        cities = cities.OrderBy(a => a, StringComparer.CurrentCulture).ToArray();

        foreach (var city in cities)
        {
            Console.WriteLine(city);
        }
    }
}
印刷品:

Ans
Balle
Århus

谢谢工作起来很有魅力。必须将对象类型从列表更改为数组,然后再更改为数组,以使其正常工作,但问题中未包括此项…谢谢!工作起来很有魅力。必须将对象类型从列表更改为数组,然后再更改为数组,才能使其正常工作,但问题中没有包括这一点。。。