VB2008 Expressを使用しています。
まず、以下のデータがあるXMLファイルがあったとします。
(途中略)
<DATA>
<IDX>0</IDX>
<TEXT>データ0</TEXT>
</DATA>
<DATA>
<IDX>1</IDX>
<TEXT>データ1</TEXT>
</DATA>
<DATA>
<IDX>2</IDX>
<TEXT>データ2</TEXT>
</DATA>
・
・
・
<DATA>
<IDX>10</IDX>
<TEXT>データ10</TEXT>
</DATA>
(以下略)
これを、DataSetに読み込み、DATAノード以下のデータをDataTableに取得しようと思っています。
Dim ds As New DataSet
Dim dt As DataTable = ds.Tables("DATA")
Dim adr() As DataRow = dt.Select("", "IDX")
ここでですが、上記のコードの最後の行で、DATAテーブルのIDXという項目でソートをかけていますが、
ソート順は、Stringとして扱われているのか、1, 10, 2, 3,...9の順になってしまいます。
しかしながら、これを数値でソートしたいのです。つまり、1, 2, 3,...9, 10の順にソートされるようにしたいのです。
項目IDXには、必ず数値(Integer相当)が入ります。
どうすればよいでしょうか?
よろしくお願いいたします。
とりあえず、読み取り用XMLにスキーマを設定し、IDX項目がIntになるようにすることにします。
これでIDXを数値ソートできるようになりました。
別案1) Integer 型の『式列』を追加し、それを用いてソートする。
dt.Columns.Add("F", GetType(Integer), "Convert(IDX, System.Int32)")
Dim adr() As DataRow = dt.Select("", "F")
別案2) OrderBy 拡張メソッドを用いてソートする。
Dim adr2() As DataRow = dt.AsEnumerable().OrderBy(Function(row) CInt(row("IDX"))).ToArray()
別案3) LINQ to DataSet を用いてソートする。
Dim adr3() As DataRow = (From x In dt Order By CInt(x.Field(Of String)("IDX"))).ToArray()
ツイート | ![]() |