DataTable.SelectメソッドのfilterExpressionとSortが競合する件について(訂正)

次回遭遇したときに忘れないように。
.net FlameworkにてDBからDataTableにてキャッシュさせた状態で再度Selectを行って
複数回のDBアクセスを省略するのは良く使われる手。
DBからSelectしてきてDataTableに例みたいなデータを持っている場合、

例:

カラム A

B

C D E
1件目 141 0001 999 01 AAAA
2件目 141 0001 999 02 BBBB
3件目 141 0001 999 01 CCCC

filterExpressionの指定を”A = ‘141’ AND B = ‘0001’ AND D =
’02′”、かつ”D DESC”でソートした結果でEのデータ
BBBBをSelectで取得しようとすると(この場合はソート意味無いけど)”D = ’02′”の抽出条件が効かずに上では3件の
全データが取得されてしまう。

この場合、DBからDataTableを生成するさい発行するSQLを、このfilterExpression順
にしておくことで回避が出来る。

この場合、ソートの条件から外すことで抽出を正常に行うことが出来る。
この場合は、

filterExpressionのみでソートを行わず、得られたRowsに対して
最大を取得するメソッドを用意する必要がある。

最大の取得はFor Eachで回すことで普通に実装可能だけど、シビアな処理速度を要求
される場合はきついよなぁ。

これで1晩晩飯食いそびれた・・・

 

コメント

タイトルとURLをコピーしました