0

我正在使用带有 VB.net 的 ASP.NET 3.5 我有一个这样的 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.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>

但不太确定解决此问题的最佳方法是什么。

4

2 回答 2

0

您可以通过以下三种方式之一执行此操作。

假设DataTable按RpID排序,有一个循环,处理每个城市。当 RpID 发生变化时,发送电子邮件。

或者...

在数据表上循环。当 RpID 发生变化时,在数据表上调用.Select并根据 RpID 进行过滤。循环返回的 DataRows 数组并处理每个城市。发送电子邮件。

或者...

由于您使用的是 ASP.NET 4,因此您可以使用 LINQ 查询从数据表中获取不同的 RpID 列表,在该 RpID 列表上循环,然后在循环中,对数据表使用 LINQ 查询以获取列表该 RpID 的数据表中的城市。发送电子邮件。看这里(这谈到了一个数据集,但实际上是一回事)

请注意,对于这些方法中的任何一种,您都必须在循环之后进行检查,以便为最后处理的 RpID 发送电子邮件。

于 2012-08-03T15:17:18.893 回答
0

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

  1. 创建一个字典(可能已排序),其中包含Repid作为键的 s 和作为值的城市列表。
  2. 处理字典。对于每个键,获取相关列表(可能对其进行排序)并发送电子邮件。

它会比你提议的要快得多。IIRC #1 也可以完全在一个 LINQ 语句中完成,请参阅:How to: Group Elements in a Sequence (LINQ to SQL)

编辑:这个stackoverflow问题似乎与Efficient DataTable Group有关

于 2012-08-03T15:20:48.890 回答