DataTable.Select将字符串值转换为Date格式并对其进行排序

时间:2012-12-07 21:20:50

标签: vb.net

我有一个由第三方组件返回的数据表,所以我无法更改SQL字符串以获得我想要的内容。所以,我得到一个包含多个列的表,所有这些都是字符串。其中一列是 BILLDATE ,其类型为字符串,但实际上以 MM / DD / YYYY 格式保存日期。

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

CODE:

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:42 pm: 添加了dataRows的定义。它的类型为DataRow()

2 个答案:

答案 0 :(得分:0)

您可以将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()

答案 1 :(得分:0)

 if (isSoundEnabled) {
    soundSwitch.setChecked(true);
    soundSwitch.setSelected(true);
  } else {
    soundSwitch.setChecked(false);
    soundSwitch.setSelected(false);
  }