DataTable.Selectメソッド。

いやまぁ1年に1回くらいはソレっぽいこと書かないといけないんじゃないかと。

2年前に産まれて初めてプログラムっていうものに触れて。
VB.Netでいろんなアプリを作ってたりするんだけどね。あんまり好きじゃないんだけど(笑)



DataTableにSelectってメソッドがあって、フィルタをかけたりソートができたりするんだけどね、

Dim dtValue as DataTable
Dim drSelect() as DataRow

----------------------
drSelect = dtValue.Select("MEMBER_CODE = 'ABC'")

とかやると、フィルタにかけられたDataTableのRowがdrSelectに配列として持ってきてくれる。


んでね、さらに引数を指定してやると、指定した通りのソート順でDataRowの配列を生成してくれる。

drSelect = dtValue.Select("MEMBER_CODE = 'ABC'", "AREA_CODE, PARTS_CODE")


みたいにすると、AREA_CODEとPARTS_CODEの順でDataRowの配列を作ってくれる。



ただ、なぜだかわからないけど、このソート順の引数にフィルタ対象のフィールド名を指定すると、オブジェクト参照で落ちる。

上の例だと、

drSelect = dtValue.Select("MEMBER_CODE = 'ABC'", "MEMBER_CODE, AREA_CODE, PARTS_CODE")

みたいに、MENBER_CODEをソート順に含めると落ちるんだよなぁ。正確には、落ちる時と落ちないときがある。なんか法則性があるんだろうけれども。


いやまぁ、根本的にフィルタかけてるんだからそのフィルタ条件となる列名をソート順に含めるような処理がおかしいワケであって。


あっ、ちなみに今時.NET FreamWorks1.1の話なので。2.0だとか3.0だとか3.5だとかではどうなってるかわかりません。。


VS2008とかになるとだいぶSQL的な書き方ができるようになってたりするみたいなので、上手く使えばかなり省力化できそうですねー。