【问题标题】:LINQ and a natural sort order [duplicate]LINQ和自然排序顺序[重复]
【发布时间】:2010-11-22 08:28:33
【问题描述】:

获取 LINQ 查询(从 SQL 数据库 - 这有关系吗?)以自然地对字符串进行排序的最简单方法是什么?

例如,我目前得到以下结果:

  • 项目 1
  • 项目 10
  • 项目 2

我想看到的是这样的:

  • 项目 1
  • 项目 2
  • 项目 10

我正在使用的查询是这样的:

return from p in dataContext.Projects
    orderby p.Name
    select p;

【问题讨论】:

  • “自然”是主观的。你能更具体地描述一下你的意思吗?
  • @StingyJack - 采用人工排序,而不是计算机排序。
  • HA - “人类”排序顺序。你的意思是拉丁字典顺序,不区分大小写?您有这些项目的 ID 吗?

标签: c# linq natural-sort


【解决方案1】:

没有使用 .NET 框架执行此操作的内置方法,但我建议您阅读 Natural Sorting in C# 以了解有关该主题和开源实现的讨论。

【讨论】:

    【解决方案2】:

    我只是迟到了几年,但我只是想解决一个类似的问题,这对我有用。希望其他人觉得这有帮助。

    假设你的字符串在一个列表中,试试这样:

    List<string> projects = new List<string>
    {
        "Project 1",
        "Project 10",
        "Project 2"
    };
    //Sort by a substring of the string value which omits the non-numeric characters
    IEnumerable<string> sorted = projects.OrderBy(p => p.Substring(p.IndexOf(' ') + 2, p.Length - (p.IndexOf(' ') + 2)));
    

    【讨论】:

    • 这很好,我也可以预先利用已知的模式。请注意,子字符串有一个方法,它只需要开始,然后到结尾p =&gt; p.Substring(p.IndexOf(" ") + 1))(它是一个双引号,+1 而不是 +2)
    猜你喜欢
    • 1970-01-01
    • 2014-08-02
    • 2023-03-20
    • 1970-01-01
    • 2013-01-07
    • 1970-01-01
    • 1970-01-01
    • 2014-10-29
    • 1970-01-01
    相关资源
    最近更新 更多