如何让LINQ根据文化订购?

Bli*_*ixt 21 c# linq sorting

比方说,我有一个字符串列表与瑞典的话:banan,äpple,apelsin,druva.

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

var result = from f in fruits // The list mentioned above
             orderby f
             select f
Run Code Online (Sandbox Code Playgroud)

这会给我:apelsin,äpple,banan,druva.然而,根据瑞典的字母,我应该得到:apelsin,banan,druva,äpple

我尝试过改变System.Threading.Thread.CurrentThread.CurrentCulture,sv-SE但这似乎并没有真正影响它.我是否必须编写自己的lambda函数并使用.OrderBy(...)或者我还能做些什么来保持LINQ完好无损?

Jon*_*eet 37

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

var result = fruits.OrderBy(f => f, StringComparer.CurrentCulture);
Run Code Online (Sandbox Code Playgroud)

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

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