0

ASP.NET3.5とVB.netを使用しています。DataTable自体があります。

RpID       LocationServed
----       --------------
1          St. Louis
1          Baltimore
1          Columbus
2          Chicago
2          St. Charles
2          Peoria
2          Nashville
3          Dallas
3          Miami
3          Indianapolis

担当者ごとに、提供されたすべての場所を記載したメールを送信する必要があります。

これをどのように行うのかよくわかりません。ASP.NET4を使用しています

私の計画は2つのループを持つことです

    <loop1 that has the group by of RepID>

     <loop2 can go through the list of items for a given RepID >

      strCity = do processing here that will compile a list of the cities for a given rep

     </loop2 end>

     <send out email a given RepID and then reset strCity >

   <loop1 end>

しかし、これに取り組むための最善のアプローチが何であるかはよくわかりません。

4

2 に答える 2

0

これは、3 つの方法のいずれかで行うことができます。

DataTable が RpID でソートされていると仮定すると、ループが 1 つあり、各都市が処理されます。RpID が変更されたら、電子メールを送信します。

また...

データ テーブルをループします。RpID が変更されたら、データ テーブルで.Select を呼び出し、 RpIDでフィルター処理します。返された DataRows の配列をループし、各都市を処理します。メールを送る。

また...

ASP.NET 4 を使用しているため、LINQ クエリを使用してデータ テーブルから RpID の個別のリストを取得し、その RpID のリストをループしてから、ループ内でデータ テーブルに対して LINQ クエリを使用してリストを取得できます。そのRpIDのデータテーブルからの都市の。メールを送る。こちらを参照してください(これは DataSet について述べていますが、実際には同じことです)

これらのアプローチのいずれについても、最後に処理された RpID の電子メールを送信するには、ループの後にチェックを行う必要があることに注意してください。

于 2012-08-03T15:17:18.893 に答える
0

この処理はすべて、2 つの別々のループで実行できます。

  1. Repids をキーとして、都市のリストを値としてテーブルの 1 回のパスで構成する (場合によってはソートされた) 辞書を作成します。
  2. 辞書を処理します。キーごとに、関連付けられているリストを取得し (場合によっては並べ替えます)、電子メールを送信します。

あなたが提案しているものよりもはるかに速いでしょう。IIRC #1 は、純粋に 1 つの LINQ ステートメントでも実行できます。参照:方法: シーケンス内の要素をグループ化する (LINQ to SQL)

編集:このスタックオーバーフローの質問は関連しているようですEfficient DataTable Group By

于 2012-08-03T15:20:48.890 に答える