C# LINQ 按错误排序

发布于 2024-11-08 01:09:05 字数 633 浏览 0 评论 0原文

嘿, 我认为 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ü

正确的顺序应该是: 亚克斯 阿布 ääü

有人遇到过这个错误吗?

Hei,
i think order by is ordering things wrongly. Example code:

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

And the result:

Ascending:
ääü
äax
äbü

The right order should be:
äax
äbu
ääü

Anybody encountered this error before?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

笑红尘 2024-11-15 01:09:05

这将使用 IComparer 的默认实现。这是一种文化敏感的比较,我相信这就是为什么它认为“ääü”位于“äax”之前。

您期待顺序比较吗?如果是这样,您可以显式指定比较器,但不能在查询表达式中指定:

IEnumerable<string> sortAscendingQuery = fruits
    .OrderBy(fruit => fruit, StringComparer.Ordinal);

如果这不是您要查找的内容,请解释您需要哪种比较。

That's going to use the default implementation of IComparer<string>. That's a culture-sensitive comparison, which I believe is why it's deeming "ääü" as coming before "äax".

Were you expecting an ordinal comparison? If so, you can specify the comparer explicitly, but not in a query expression:

IEnumerable<string> sortAscendingQuery = fruits
    .OrderBy(fruit => fruit, StringComparer.Ordinal);

If that's not what you're looking for, please explain what sort of comparison you need.

绾颜 2024-11-15 01:09:05

此 linq 返回正确的结果 - 您需要指定要使用的字符串比较。

foreach (string s in fruits.OrderBy(s=>s, StringComparer.OrdinalIgnoreCase ) )
{
  Console.WriteLine(s);
}

This linq returns the correct results - you need specify the string comparison to use.

foreach (string s in fruits.OrderBy(s=>s, StringComparer.OrdinalIgnoreCase ) )
{
  Console.WriteLine(s);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文