【问题标题】:Sort a table in ascending order by taking into account only a part of the value in a column通过仅考虑列中的一部分值对表进行升序排序
【发布时间】:2020-07-28 08:50:19
【问题描述】:

我想按升序对表格进行排序,但是我需要排序的字段的值有一部分不应该考虑进行这种排序,因为它是随机生成的,我不希望它影响.

示例:我有 ES0420111112 和 ES0120111113

在这种情况下,由于初始 04,值 ES0420111112 被认为更高,但我只想在排序时考虑从第六个值开始,即 111112

这样我会先展示自己 ES0420111112 然后展示 ES0120111113

我尝试创建一个与前一个类似的辅助表,但删除了该列的值并稍后对其进行排序,但我不知道如何将该过滤顺序应用于我真正想要的那个。知道怎么做吗?我想在比较两个表时,解决方案与“索引”的顺序有关。

【问题讨论】:

  • 你说的是什么表?这是一个 DataTable 还是你正在通过 SQL 获取一个表来说话。您想在哪里进行比较(是在 SQL 中还是在代码中)??
  • 我认为这很清楚,因为我把标签 vb.net 和 datatable,但我的意思是在 vb.net "Dim dt as Datatable" 的代码中

标签: vb.net sorting datatable


【解决方案1】:

你有这样的想法吗?

 Try

        Dim table As DataTable = New DataTable
        table.Columns.Add("Column1")

        For i As Integer = 111 To 0 Step -2
            Dim row As DataRow = table.NewRow
            row.Item("Column1") = "ES012011111" & i.ToString
            table.Rows.Add(row)
        Next

        Dim orderedRows = From record In table
                          Select Column1 = record.Item("Column1"),
                                 ColumnForOrder = Microsoft.VisualBasic.Right(CStr(record.Item("Column1")), 6)
                          Order By ColumnForOrder Ascending


        For Each row In orderedRows
            Console.WriteLine("Column1: " & row.Column1.ToString)
            Console.WriteLine("ColumnForOrder: " & row.ColumnForOrder)
        Next

    Catch ex As Exception
        Console.WriteLine(ex.ToString)
    End Try

【讨论】:

    猜你喜欢
    • 2014-02-06
    • 1970-01-01
    • 1970-01-01
    • 2013-04-19
    • 2013-05-13
    • 2016-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多