Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
544 views
in Technique[技术] by (71.8m points)

c# - How do I get LINQ to order according to culture?

Let's say I've got a list of strings with Swedish words: banan, ?pple, apelsin, druva.

Now I want to get this list sorted (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?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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));

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...