1

サードパーティのコンポーネントから返されるデータテーブルがあるため、SQL文字列を変更して必要なものを取得する方法がありません。だから、私はいくつかの列を持つテーブルを取得します、それらはすべて文字列です。列の1つは文字列型の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-074:42pm:dataRowsの定義を追加しました。タイプですDataRow()

4

2 に答える 2

1

DateTime.ParseExact複数のフォーマット文字列で使用できます。「日付」には1つある場合と2つある場合があるため、それらが必要です。代わりに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 に答える