平, 我认为秩序错误地命令。示例代码:
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ü
正确的顺序应该是: AAX 阿布 AAU
之前有人遇到过这个错误吗?
答案 0 :(得分:8)
这将使用IComparer<string>
的默认实现。这是一种文化敏感的比较,我相信这就是为什么它认为“ääü”出现在“äax”之前。
您是否期望进行序数比较?如果是这样,您可以显式指定比较器,但不能在查询表达式中指定:
IEnumerable<string> sortAscendingQuery = fruits
.OrderBy(fruit => fruit, StringComparer.Ordinal);
如果那不是你想要的,请解释你需要什么样的比较。
答案 1 :(得分:2)
此linq返回正确的结果 - 您需要指定要使用的字符串比较。
foreach (string s in fruits.OrderBy(s=>s, StringComparer.OrdinalIgnoreCase ) )
{
Console.WriteLine(s);
}