C# LINQ 按错误排序



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

相关内容

  • 没有找到相关文章

最新更新