dictionary改写if语句

我最近做一个复杂的报表,需要将系统中很多表的数据,都集中显示在这个报表中。报表的项目跟系统表的项目名称不一样,但是又是一一对应的,比如报表项目“身高m”,在系统里面叫“身高”。将系统数据查询出来,并赋值到报表的时候,我用到了if语句,如下代码所示:

private void AddLisItems(List<string> list)
        {
            //插入基本项目信息
            DataSet dsLisItems = null;
            this.dtLisItems.Rows.Clear();//先全部清空
            foreach (string s in list)
            {
                dsLisItems = logic.GetBaseChkItems(s);
                if (dsLisItems != null)
                {
                    DataRow drB = this.dtLisItems.NewRow();
                    drB["流水号"] = s;

                    foreach (DataRow dr in dsLisItems.Tables[0].Rows)
                    {
                        if (dr["checkitem_name"].ToString() == "身高")
                        {
                            drB["身高m"] = dr["chk_result"];
                        }
                        else if (dr["checkitem_name"].ToString() == "体重")
                        {
                            drB["体重kg"] = dr["chk_result"];
                        }
                        else if (dr["checkitem_name"].ToString() == "血压")
                        {
                            string result = dr["chk_result"].ToString();
                            if (result.Contains("/"))
                            {
                                drB["收缩压"] = result.Substring(0, result.IndexOf("/"));
                                drB["舒张压"] = result.Substring(result.IndexOf("/") + 1);
                            }
                            else
                            {
                                drB["收缩压"] = result;
                                drB["舒张压"] = result;
                            }
                        }
                        else if (dr["checkitem_name"].ToString() == "左眼裸视力")
                        {
                            drB["左眼"] = dr["chk_result"];
                        }
                        else if (dr["checkitem_name"].ToString() == "右眼裸视力")
                        {
                            drB["右眼"] = dr["chk_result"];
                        }
                        else if (dr["checkitem_name"].ToString() == "肺活量")
                        {
                            drB["肺活量"] = dr["chk_result"];
                        }
                    this.dtLisItems.Rows.Add(drB);
                }
            }
        }

真的很多if-else的判断,我列出来的项目只有5个,用这种方式写还不算复杂。但是,我的报表有50多个项目需要进行这样的if判断,那一个简单的需求,不是要写很多超级多的代码。这种感觉真的很糟糕,维护起来也会很复杂,单步执行调试就够头大的了。
那我用什么办法改进呢?我想到了数据字典,使用数据字典改写这个if判断。我先讲需要对照的项目保存在数据表里面,如下图所示:
这里写图片描述

因为左边的项目是不会重复的,这样就可以当做字典的键值,右边的项目就是报表的值了,我们不需要对照的判断,只是需要判断键值存不存在就OK了,

string item = dr["checkitem_name"].ToString();
                        string result = dr["chk_result"].ToString();
                        if (dicCompare.ContainsKey(item))
                        {
                            if (dicCompare[item].Contains(","))
                            {
                                string[] temps = dicCompare[item].Split(new char[] { ',' });

                                if (result.Contains("/"))
                                {
                                    drB[temps[0]] = result.Substring(0, result.IndexOf("/"));
                                    drB[temps[1]] = result.Substring(result.IndexOf("/") + 1);
                                }
                                else
                                {
                                    drB[temps[0]] = result;
                                    drB[temps[1]] = result;
                                }
                            }
                            else
                            {
                                drB[dicCompare[item]] = result;
                            }
                        }
                    }

如何改写呢?
(1)创建字典
我将要对照的数据写入数据表compare_info中,在例子中,我把上图中左边列当作键,右边当作值;在初始化的时候,我就先查询系统的compare_info表,创建字典dictionary。
(2)使用键,查找对应的值
dicCompare[item]这个值就是报表的值

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

panliuwen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值