views:

163

answers:

1

Say I've got a list of strings with Swedish words: banan, äpple, apelsin, druva

Now I want to get this list ordered (keep in mind that this is a very simplified version of the real query):

var result = from f in fruits // The list mentioned above
             orderby f
             select f

This will give me: apelsin, äpple, banan, druva. However, according to the Swedish alphabet, I should get: apelsin, banan, druva, äpple

I tried changing System.Threading.Thread.CurrentThread.CurrentCulture to sv-SE but that didn't really seem to affect it at all. Do I have to write my own lambda function and use .OrderBy(...) or is there something else I can do to keep the LINQ intact?

+4  A: 

You can't do this with a query expression, but you can do it with explicit dot notation:

var result = fruits.OrderBy(f => f, StringComparer.CurrentCulture);

That should do it, assuming the thread's current culture is correct. Alternatively:

CultureInfo culture = new CultureInfo("sv-SE");
var result = fruits.OrderBy(f => f, StringComparer.Create(culture, false));
Jon Skeet
Yup, I suspected as much... I'd just hoped there was a convenient way to keep using the simplified LINQ query =)
Blixt