Linq orderby национальные наборы символов - PullRequest
1 голос
/ 16 мая 2011

У меня есть список, который я заказал по алфавиту на имущество.

К сожалению, настройка базы данных (я полагаю) не обрабатывает национальные символы должным образом при извлечении данных ... Хотя я не могу изменить это (не мою базу данных), поэтому мне нужно решить проблему непосредственно по этому конкретному вопросу.Поэтому я упростил приведенный ниже пример.

            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заказать, используя определенный набор символов?

Заранее спасибо,

Стин Педерсен

1 Ответ

5 голосов
/ 16 мая 2011

Вы можете указать культуру при заказе.Например:

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
...