C#LINQ按错误排序

时间:2011-05-18 12:48:27

标签: c# linq sql-order-by

平, 我认为秩序错误地命令。示例代码:

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

之前有人遇到过这个错误吗?

2 个答案:

答案 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);
}