次回遭遇したときに忘れないように。
.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晩晩飯食いそびれた・・・
コメント