2011年4月5日火曜日

SQL Server からデータを抽出しループで処理

前回の記事の続きとして、SQL Server からデータを抽出しその結果でループ処理を行う Workflow です。今回の Workflow 全体はこのような形になります。

WF4-1

データを抽出する ReadSQLDataActivity は前回のものを利用し、その結果に対して ForEach<T>Activity を用い、ループ内部で DisplayActivity で表示を行うものです。

Activity 自体はこれまでのものを利用しているので前回までの記事を参考にしてもらうとして、今回は ForEach Activity を利用したループ処理を行います。ForEach Activity はロジックで利用する ForEach と同一のもので、Inに指定したコレクションに対してループを行うためのものです。その際の指定方法さえ押さえれば全く問題はありません。

ForEach Activity の In に記載するものは IEnumerable<T> でなければなりません。今回データを抽出、保持した Dataset クラスではそのままだと IEnumerable で返却するメソッド等が用意されていませんが、拡張メソッドとして用意されています。DataTableExtensions 静的クラスの AsEnumerable メソッドを利用する事で、DataTable に属する DataRow を IEnumerable な形で取得できますので DataTableExtensions.AsEnumerable(ResultDataSet.Tables(0)) と記載します。

そしてループ内部では DataRow が Item という変数にて利用できるようになります。この変数は手動で設定する必要がなく、Workflow 側で自動で利用可能になります。デザイナ下部の変数リストにも表示されません。今回は単純にレコードの1項目目を表示する形にしますので、Itm[0].ToString と設定します。

これを実行する事で、ReadSQLDataActivity にて抽出したレコードの1項目目が、レコード件数分表示されるように動作します。アプリケーションにて当然のように利用するロジックの形が、Workflow として簡単に定義できるのがわかると思います。

0 件のコメント:

コメントを投稿