>Hei,我认为排序是错误的排序。示例代码:
static void Main()
{
// Create a delicious data source.
string[] fruits = { "äax", "ääü", "äbü" };
// Query for ascending sort.
IEnumerable<string> sortAscendingQuery =
from fruit in fruits
orderby fruit //"ascending" is default
select fruit;
// Execute the query.
Console.WriteLine("Ascending:");
foreach (string s in sortAscendingQuery)
{
Console.WriteLine(s);
}
}
结果是:
Ascending:
ääü
äax
äbü
正确的顺序应该是:艾克斯阿布ääü
以前有人遇到过此错误吗?
这将使用 IComparer<string>
的默认实现。这是一个对文化敏感的比较,我相信这就是为什么它认为"ääü"在"äax"之前。
您是否期待序数比较?如果是这样,则可以显式指定比较器,但不能在查询表达式中指定:
IEnumerable<string> sortAscendingQuery = fruits
.OrderBy(fruit => fruit, StringComparer.Ordinal);
如果这不是您要找的,请解释您需要哪种比较。
此 linq 返回正确的结果 - 您需要指定要使用的字符串比较。
foreach (string s in fruits.OrderBy(s=>s, StringComparer.OrdinalIgnoreCase ) )
{
Console.WriteLine(s);
}