我有一个由第三方组件返回的数据表,所以我无法更改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()
答案 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);
}