2012-08-03 58 views
0

我使用ASP.NET 3.5與VB.net 我有一個DataTable這樣的。ASP.NET VB.NET數據表需要做羣

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.NET 4

我的計劃是有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> 

不過不太清楚,最好的辦法就是解決這個什麼。

+0

您需要發送多封電子郵件,以相同的RFID?如果這是爲什麼你需要分組! – 2012-08-03 15:14:08

回答

0

您可以通過以下三種方法之一來完成此操作。

假設DataTable按RpID排序,有一個循環,處理每個城市。當RpID發生變化時,發送電子郵件。

或...

在數據表上循環。當RpID發生變化時,請在數據表上調用.Select並在RpID上過濾。在返回的DataRows數組上循環並處理每個城市。發送電子郵件。

或者......

由於您使用ASP.NET 4,您可以使用LINQ查詢從數據表中,環RpIDs的名單上獲得的RFID的一個獨特的列表,然後在環,在數據表上使用LINQ查詢以從該數據表中獲取該RpID的城市列表。發送電子郵件。請參閱here(這是關於數據集的討論,但實際上是一樣的)

請注意,對於這些方法中的任何一種,您必須在循環之後檢查以發送處理的最後一個RpID的電子郵件。

+0

您可能也可以使用LINQ與數據表進行分組,而不必使用LINQ語句。 – 2012-08-03 15:34:23

0

您可以在兩個單獨的循環中完成所有這些處理。

  1. 創建由所述Repid S作爲密鑰和城市的列表如表中的單次通過值的字典(可能排序)。
  2. 處理字典。對於每個鍵,抓住關聯的列表(可能對其進行排序)併發送電子郵件。

它比任何你提出的要快得多。 IIRC#1可以在一個聲明LINQ做純粹還有,請參閱:How to: Group Elements in a Sequence (LINQ to SQL)

編輯:這個計算器的問題似乎與Efficient DataTable Group By