首页 新闻 会员 周边

求一个算法,详见内容

1
悬赏园豆:10 [已解决问题] 解决于 2013-05-02 22:05

 遍历一个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每天都有值),谢谢!

问题补充:

 怎么判断前后两次的公司编号是相同的?

Verms的主页 Verms | 菜鸟二级 | 园豆:286
提问于:2013-05-02 11:08
< >
分享
最佳答案
0

已经解决了,谢谢大家。代码逻辑里有一处Bug,由于之前是看代码解决bug的,没看到这处,这次是模拟实现,已经解决了。

Verms | 菜鸟二级 |园豆:286 | 2013-05-02 22:03
其他回答(4)
0

1、直接循环DataTable.Rows

2、如果email为空则跳过该列,就continue

3、获取相同公司编号的订单号

收获园豆:3
滴答的雨 | 园豆:3660 (老鸟四级) | 2013-05-02 11:18

 思路相同,但是后面随机出现了bug,这个Bug一时间还不好找,所以我要这块业务逻辑我要重写。

支持(0) 反对(0) Verms | 园豆:286 (菜鸟二级) | 2013-05-02 12:36
1

建立一个哈希表,索引是公司编号,值域存 订单号字符串。

循环DataTable.Rows,

{判断email,空不做处理,

       不空时,拿出公司编号,判断哈希表里存在了没,

                     存在 拿出订单号,加入到值域。

                   不存在,就把当前的编号和订单号 加到哈希表里。

}

最后哈希表里的东西想怎么拿就怎么拿,循环输出或存库都行。

PS:订单号可以字符串形式,一直添加存,或者字符数组存。

        

收获园豆:3
北落师门α | 园豆:17 (初学一级) | 2013-05-02 12:16

 相同的公司编号我是存在一个list中,这个需要考虑list为空的情况。

支持(0) 反对(0) Verms | 园豆:286 (菜鸟二级) | 2013-05-02 12:55

@传非传:  

//建立一个哈希表,索引是公司编号,值域存 订单号字符串

 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());
                }
            }

支持(0) 反对(0) 北落师门α | 园豆:17 (初学一级) | 2013-05-02 18:26

@传非传: “相同的公司编号我是存在一个list中.”

不需要这样的list,哈希表以公司编号为索引,有这个索引就是有,就是相同。

支持(0) 反对(0) 北落师门α | 园豆:17 (初学一级) | 2013-05-02 18:41
0

构造一个数组(HashTable),Key为 公司编号,值为 订单编号。

遍历DataTable.Rows,之后根据Rows["公司编号"]从HashTable里判断编号是否存在,如果存在就把原来的值+=,不存在就直接Add。

之后再对HashTable进行操作。

收获园豆:2
@@@一统@@@ | 园豆:1551 (小虾三级) | 2013-05-02 12:33

我是存在list中,相同list.add(..);  会出现随机Bug.。

支持(0) 反对(0) Verms | 园豆:286 (菜鸟二级) | 2013-05-02 12:57

@传非传: 

最好把你写的代码列出来,错误日志也写出来,这样方便给你找Bug

支持(0) 反对(0) @@@一统@@@ | 园豆:1551 (小虾三级) | 2013-05-02 16:12

@@@@一统@@@: 谢谢,bug已经找出并解决了。

支持(0) 反对(0) Verms | 园豆:286 (菜鸟二级) | 2013-05-02 17:53
0

请问维护在获取DataTable之前过滤掉Email 为空的?
另外Bug是什么?

收获园豆:2
丫的 | 园豆:1575 (小虾三级) | 2013-05-02 14:09

有过滤。

Bug是前一个订单编号遍历到后一个list中了

支持(0) 反对(0) Verms | 园豆:286 (菜鸟二级) | 2013-05-02 14:27

@传非传: 什么意思啊?贴一下代码好嘛 顺便标注出错的地方

支持(0) 反对(0) 丫的 | 园豆:1575 (小虾三级) | 2013-05-02 14:32

@tomcat1988: 谢谢,bug已经找出并解决了。

支持(0) 反对(0) Verms | 园豆:286 (菜鸟二级) | 2013-05-02 17:52
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册