如何根据文化获得LINQ订购?

说我有一个带有瑞典语单词的字符串列表: apelsindruvaapelsindruva

现在我想要列出这个列表(请记住,这是真实查询的一个非常简化的版本):

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

这会给我: apelsindruvadruvadruva 。 然而,根据瑞典字母表,我应该得到: apelsindruvaapelsindruva

我尝试将System.Threading.Thread.CurrentThread.CurrentCulture更改为sv-SE但这根本不会影响它。 我是否必须编写自己的lambda函数并使用.OrderBy(...)或者我还能做些什么来保持LINQ完好无损?

您无法使用查询表达式执行此操作,但可以使用显式点表示法执行此操作:

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

应该这样做,假设线程的当前文化是正确的。 或者:

 CultureInfo culture = new CultureInfo("sv-SE"); var result = fruits.OrderBy(f => f, StringComparer.Create(culture, false)); 

我已经尝试过你的用例,它确实提供了有效的结果,而无需提供特定于文化的比较器(在.NET 3.5和.NET 4.0中):

  Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("sv-SE"); var fruits = new[] { "banan", "äpple", "apelsin", "druva" }; var result = (from f in fruits orderby f select f).ToList(); // outputs: apelsin, banan, druva, äpple string resultsJoined = string.Join(", ", result);