遍历一个DataTable中的数列,获取相同公司编号的订单号,如果email为空则跳过该列,根据这些求一个算法。
DataTable结构
公司编号 email 订单号
T0001 aa@test.com abc1000001,ss1000002
T0001 aa@test.com abc1000003,ss1000004
T0002 cc@test.com ccc1000005,cc10000008
T0003 ccc100006,xx200000002
T0004 bb@test.com ccc100008,
ps:email可能为空。我写的有bug,那个Bug是随机出现的,在客户那边一个星期出现2次,这个服务是每天都在用的。(datatable每天都有值),谢谢!
怎么判断前后两次的公司编号是相同的?
已经解决了,谢谢大家。代码逻辑里有一处Bug,由于之前是看代码解决bug的,没看到这处,这次是模拟实现,已经解决了。
1、直接循环DataTable.Rows
2、如果email为空则跳过该列,就continue
3、获取相同公司编号的订单号
思路相同,但是后面随机出现了bug,这个Bug一时间还不好找,所以我要这块业务逻辑我要重写。
建立一个哈希表,索引是公司编号,值域存 订单号字符串。
循环DataTable.Rows,
{判断email,空不做处理,
不空时,拿出公司编号,判断哈希表里存在了没,
存在 拿出订单号,加入到值域。
不存在,就把当前的编号和订单号 加到哈希表里。
}
最后哈希表里的东西想怎么拿就怎么拿,循环输出或存库都行。
PS:订单号可以字符串形式,一直添加存,或者字符数组存。
相同的公司编号我是存在一个list中,这个需要考虑list为空的情况。
@传非传:
//建立一个哈希表,索引是公司编号,值域存 订单号字符串
public static Hashtable htb= new Hashtable();
//循环DataTable.Rows,
foreach (DataRow dr in dt.Rows)
{//判断email,空不做处理,
if (String.IsNullOrEmpty(dr["email字段名字"].ToString()))
{continue;}
//不空时,拿出公司编号,判断哈希表里存在了没,
if (htb.ContainsKey(dr["公司编号字段名字"].ToString()))
{
// 存在 更新原有的订单,即,取出原有的,拼接了再放回去。
string Str_old= htb[dr[公司编号字段名字]].toString();
htb[dr[公司编号字段名字]] =Str_old+dr[订单号字段名字].ToString();
}
else
{ // 不存在,就把当前的编号和订单号 加到哈希表里。
htb.Add(dr[公司编号字段名字].ToString(), dr[订单号字段名字].ToString());
}
}
@传非传: “相同的公司编号我是存在一个list中.”
不需要这样的list,哈希表以公司编号为索引,有这个索引就是有,就是相同。
构造一个数组(HashTable),Key为 公司编号,值为 订单编号。
遍历DataTable.Rows,之后根据Rows["公司编号"]从HashTable里判断编号是否存在,如果存在就把原来的值+=,不存在就直接Add。
之后再对HashTable进行操作。
我是存在list中,相同list.add(..); 会出现随机Bug.。
@传非传:
最好把你写的代码列出来,错误日志也写出来,这样方便给你找Bug
@@@@一统@@@: 谢谢,bug已经找出并解决了。
请问维护在获取DataTable之前过滤掉Email 为空的?
另外Bug是什么?
有过滤。
Bug是前一个订单编号遍历到后一个list中了
@传非传: 什么意思啊?贴一下代码好嘛 顺便标注出错的地方
@tomcat1988: 谢谢,bug已经找出并解决了。