1

我有一个由第 3 方组件返回的数据表,因此我无法更改 SQL 字符串以获得我想要的。所以,我得到一个有几列的表,它们都是字符串。其中一列是BILLDATE,它是字符串类型,但实际上以MM/DD/YYYY格式保存日期。

问题:我需要按降序对记录进行排序并选择日期最大的记录。

代码:

Dim dataRows As DataRow()
Dim dt As New DataTable
dt = GetTable()
dataRows = dt.Select("", "BILLDATE DESC")

样本数据:

10/23/2010
9/23/2010
8/23/2010
7/23/2010
6/23/2010

从样本数据中,9/23/2010记录作为第一条记录返回,而不是10/23/2010. 这是我尝试过的:

dataRows = dt.Select("MAX(CONVERT(DateTime,BILLDATE))", "")- 运行时错误

dataRows = dt.Select("", "Convert(BILLDATE,'System.DateTime')")- 运行时错误

我不希望遍历所有记录以获取最新日期并选择它。有任何想法吗?

编辑 1 - 2012-12-07 4:42pm:添加了 dataRows 的定义。它是类型DataRow()

4

2 回答 2

1

您可以使用DateTime.ParseExact多个格式字符串。你需要它们,因为你的“约会”有时有一个地方,有时有两个地方。我会改用 Linq:

Dim ordered = From row In dt.AsEnumerable()
              Let billDate = Date.ParseExact(
                              row.Field(Of String)("Billdate"),
                              {"MM/dd/yyyy", "M/dd/yyyy"},
                              Globalization.CultureInfo.InvariantCulture,
                              Globalization.DateTimeStyles.None)
              Order By billDate Descending
              Select row
' if you want to create a new DataTable from the rows: '
Dim tblOrdered = ordered.CopyToDatatable()
于 2012-12-07T21:26:44.903 回答
0
Dim LastDate As Date = dt.AsEnumerable().Max(Function(a) Convert.ToDateTime(a("BILLDATE")))
于 2017-05-22T07:05:52.877 回答