C#之DataTable转Entity实体

笔者原是前端,因公司业务需要,现在也开始跨后端开发;

手头一个项目,因公司配备的后端写接口是用Hand Sql,返回的都是DataTable,这让用惯了EF的笔者,十分不习惯。

网上找了些DataTable转Entity的文章,都不是令笔者十分满意。

笔者发现了一种十分简便易懂的写法,利用Newtonsoft.Json非常轻松的实现DataTable转Entity,遂贴出来供大家参考。

       原先后端的HandSql写法:​

        public DataTable GetTemplate(string tempNo)
        {
            string sql = @"SELECT    m.ID,
                                    m.TempNo,
                                    m.Signs,
                                    m.Template                                 
                            FROM    MsgTemplate m WHERE TempNo=@TempNo";
 
            SqlParameter[] parms = { new SqlParameter("@TempNo", tempNo) };
 
            DataTable dt = SQLHelper.ExecutDataSet(sql, parms).Tables[0];
            return dt;
        }

笔者的写法,这个方法的意思是通过短信模板编号找到数据库中对应的短信模板并返回:​

            public MsgTemplate GetTemplate<T>(string tempNo)
            {
                string sql = @"SELECT    m.ID,
                                    m.TempNo,
                                    m.Signs,
                                    m.Template                                 
                            FROM    MsgTemplate m WHERE TempNo=@TempNo";
    
                SqlParameter[] parms = { new SqlParameter("@TempNo", tempNo) };
 
                DataTable dt = SQLHelper.ExecutDataSet(sql, parms).Tables[0];
                var obj = GetOD<MsgTemplate>(dt);
                return obj;
            }
 

转换的代码,这里因为只有一行数据,所以返回的是一个单个的实体。 

        public static T GetOD<T>(DataTable dt)
        {
            try
            {
                var res = JsonConvert.SerializeObject(dt);
                var mt = JsonConvert.DeserializeObject<List<T>>(res);
                if (mt.Count == 1)
                    return mt[0];
                return default(T);
            }
            catch (Exception e)
            {
                e = e.GetBaseException();
                LogHelper.LogError("BaseDb", e.Message);
                return default(T);
            }
        }
 

如果是多行的结果集,直接返回包含该数据集的List就可以:​

        public static List<T> GetDT<T>(DataTable dt)
        {
            try
            {
                var res = JsonConvert.SerializeObject(dt);
                var mt = JsonConvert.DeserializeObject<List<T>>(res);
                if (mt.Count > 0)
                    return mt;
                return default(List<T>);
            }
            catch (Exception e)
            {
                e = e.GetBaseException();
                LogHelper.LogError("BaseDb", e.Message);
                return default(List<T>);
            }
        }
 

总结:DataTable原本就是一个多行的数据集,可以把它看成于一个List,利用JsonConvert.SerializeObject()序列化和JsonConvert.DeserializeObject()反序列化,就可以很轻松的实现互转了,而且转换出来前端可以直接拿来用,十分方便。
————————————————
版权声明:本文为CSDN博主「「已注销」」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/aqtoo/article/details/88420770

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值