ASP.NET VB.NET数据表需要做群

问题描述:

我使用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

您可以通过以下三种方法之一来完成此操作。

假设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

您可以在两个单独的循环中完成所有这些处理。

  1. 创建由所述Repid S作为密钥和城市的列表如表中的单次通过值的字典(可能排序)。
  2. 处理字典。对于每个键,抓住关联的列表(可能对其进行排序)并发送电子邮件。

它比任何你提出的要快得多。 IIRC#1可以在一个声明LINQ做纯粹还有,请参阅:How to: Group Elements in a Sequence (LINQ to SQL)

编辑:这个计算器的问题似乎与Efficient DataTable Group By