概述
笔者原是前端,因公司业务需要,现在也开始跨后端开发;
手头一个项目,因公司配备的后端写接口是用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
最后
以上就是尊敬眼神为你收集整理的C#之DataTable转Entity实体的全部内容,希望文章能够帮你解决C#之DataTable转Entity实体所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复