如何将datatable转成实体对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将datatable转成实体对象相关的知识,希望对你有一定的参考价值。

比如一个实体类Student,如何将DataTable转成Student类呢?

public static SignInfo selectByIDx(int pid)//根据ID查询 今天的 返回对象

DataTable dt = SignInfoServices.selectByID(pid);
if (dt.Rows.Count >= 1)

SignInfo sig = new SignInfo();
sig.Date = (DateTime)dt.Rows[0]["date"];
sig.Pid = (int)dt.Rows[0]["Pid"];
sig.FirstTime = (DateTime)dt.Rows[0]["FirstTime"];
sig.LastTime = (DateTime)dt.Rows[0]["LastTime"];
sig.Mark = (string)dt.Rows[0]["Mark"];
return sig;

return null;


大概就这样呗 SignInfoServices 是一个数据库处理类 SignInfo 实体对象类

可以参考下。。。

补充下:这样是放回datatable中第一行数据 dt.Rows[0]
参考技术A 主要思路是将DataTable里面的属性一个个取出来放到Student的成员里面去。

DataTable dt;(里面已经有数据了)
ArrayList retStudentList;
for(int i=0;i<dt.ROWS.COUNT;i++)

Student st = new Student ();
dt.rows[i].["studentId"] = st .studentId;
。。。。。
retStudentList.add(st );

结果就在retStudentList里。。。
参考技术B C# 常用函数库 - 对象转换-压缩解压object为byte数组

[原创] DataTable与Object互相转换及相关函数转换大全(DataConvert类)

源代码:
http://hi.baidu.com/jonnysuen/blog/item/b13e67ae7004fcf2fbed5036.html
参考技术C 呃 不太清楚你想做什么
不过大概可以新建一个Student对象 然后将DataTable中的东西读出来 然后更改Student对象的属性!
你是想这么做么?

使用反射将DataTable的数据转成实体类

利用反射避免了硬编码出现的错误,但是实体类的属性名必须和数据库名字对应(相同)

1、利用反射把DataTable的数据写到单个实体类

 1         /// <summary>
 2         /// 利用反射把DataTable的数据写到单个实体类
 3         /// </summary>
 4         /// <typeparam name="T"></typeparam>
 5         /// <param name="dtSource"></param>
 6         /// <returns></returns>
 7         public static T ToSingleEntity<T>(System.Data.DataTable dtSource)
 8         {
 9             if (dtSource == null)
10             {
11                 return default(T);
12             }
13 
14             if (dtSource.Rows.Count != 0)
15             {
16                 Type type = typeof(T);
17                 Object entity = Activator.CreateInstance(type);         //创建实例               
18                 foreach (PropertyInfo entityCols in type.GetProperties())
19                 {
20                     if (!string.IsNullOrEmpty(dtSource.Rows[0][entityCols.Name].ToString()))
21                     {
22                         entityCols.SetValue(entity, dtSource.Rows[0][entityCols.Name], null);
23                     }
24                 }
25                 return (T)entity;
26             }
27             return default(T);
28         }

2、利用反射把DataTable的数据写到集合实体类里

 1         /// <summary>
 2         /// 利用反射把DataTable的数据写到集合实体类里
 3         /// </summary>
 4         /// <typeparam name="T"></typeparam>
 5         /// <param name="dtSource"></param>
 6         /// <returns></returns>
 7         public static IEnumerable<T> ToListEntity<T>(System.Data.DataTable dtSource)
 8         {
 9             if (dtSource == null)
10             {
11                 return null;
12             }
13 
14             List<T> list = new List<T>();
15             Type type = typeof(T);
16             foreach (DataRow dataRow in dtSource.Rows)
17             {
18                 Object entity = Activator.CreateInstance(type);         //创建实例               
19                 foreach (PropertyInfo entityCols in type.GetProperties())
20                 {
21                     if (!string.IsNullOrEmpty(dataRow[entityCols.Name].ToString()))
22                     {
23                         entityCols.SetValue(entity, dataRow[entityCols.Name], null);
24                     }
25                 }
26                 list.Add((T)entity);
27             }
28             return list;
29         }

 

以上是关于如何将datatable转成实体对象的主要内容,如果未能解决你的问题,请参考以下文章

实体类Json串转成DataTable

求问 C#如何将json字符串转为datatable 求详细解答

怎么将datatable中的数据写入实体类?

DataTable转成List集合

令人惊讶的性能差异:List.Contains、Sorted List.ContainsKey、DataRowCollection.Contains、Data Table.Select、DataTab

如何在PrimeFaces中找出DataTable是否处于行编辑状态?