当前位置:   article > 正文

DateTable映射到对象的字段和属性_c#利用table字段映射

c#利用table字段映射

DateTable映射到对象的字段和属性

简介:

作为一个菜鸟,因该有颗不甘做菜鸟的心。这里介绍一个C#中比较高级点的技术,反射技术。曾经有人说过当你懂了反射技术,就告别了菜鸟。这里先介绍一个反射的有趣例子。接下几天后来个系列讲解,希望大家收看。

问题:

将dataTable中的数据映射到对象的字段和属性。也是现在好多软件做的关系-对象映射技术。这里新建一个控制台程序。

实现小例子

1、首先创建一个用于实例化对象的类

  1. <span style="font-size:18px;">classFoo
  2. {
  3. publicstring Username = "";
  4. publicint Level { get; set; }
  5. }</span>

2、创建数据源

  1. <span style="font-size:18px;">staticDataTable GetTable()
  2. {
  3. DataTable dt = newDataTable();
  4. dt.Columns.Add("Username");
  5. dt.Columns.Add("Level", typeof(int));
  6. dt.Rows.Add("John", 1);
  7. dt.Rows.Add("Cait", 2);
  8. return dt;
  9. }</span>
4、映射单个对象方法
  1. <span style="font-size:18px;"> //一个实例绑定
  2. static T BindData<T>(DataTable dt)
  3. {
  4. DataRow dr = dt.Rows[0];
  5. // Get all columns'name
  6. List<string> columns = newList<string>();
  7. foreach (DataColumn dc in dt.Columns)
  8. {
  9. columns.Add(dc.ColumnName);
  10. }
  11. // Create object
  12. var ob = Activator.CreateInstance<T>();
  13. // Get all fields
  14. var fields = typeof(T).GetFields();
  15. foreach (var fieldInfo in fields)
  16. {
  17. if(columns.Contains(fieldInfo.Name))
  18. {
  19. //Fill the data into the field
  20. fieldInfo.SetValue(ob, dr[fieldInfo.Name]);
  21. }
  22. }
  23. // Get allproperties
  24. var properties = typeof(T).GetProperties();
  25. foreach (var propertyInfo in properties)
  26. {
  27. if(columns.Contains(propertyInfo.Name))
  28. {
  29. //Fill the data into the property
  30. propertyInfo.SetValue(ob, dr[propertyInfo.Name]);
  31. }
  32. }
  33. return ob;
  34. }</span>

5、映射整个集合方法

 

  1. //实例列绑定
  2. staticList<T>BindDataList<T>(DataTable dt)
  3. {
  4. List<string> columns = newList<string>();
  5. foreach (DataColumn dc in dt.Columns)
  6. {
  7. columns.Add(dc.ColumnName);
  8. }
  9. var fields = typeof(T).GetFields();
  10. var properties = typeof(T).GetProperties()
  11. List<T> lst = newList<T>();
  12. foreach (DataRow dr in dt.Rows)
  13. {
  14. var ob = Activator.CreateInstance<T>();
  15. foreach (var fieldInfo in fields)
  16. {
  17. if(columns.Contains(fieldInfo.Name))
  18. {
  19. fieldInfo.SetValue(ob, dr[fieldInfo.Name]);
  20. }
  21. }
  22. foreach (var propertyInfo in properties)
  23. {
  24. if(columns.Contains(propertyInfo.Name))
  25. {
  26. propertyInfo.SetValue(ob, dr[propertyInfo.Name]);
  27. }
  28. }
  29. lst.Add(ob);
  30. }
  31. return lst;
  32. }

运行程序:

  1. <span style="font-size:18px;">staticvoid Main(string[] args)
  2. {
  3. DataTable dt = GetTable();
  4. Foo foo = BindData<Foo>(dt);
  5. Console.WriteLine("输出单个实体转化");
  6. Console.Write("名字:{0}, ",foo.Username);
  7. Console.Write("Level:{0}",foo.Level);
  8. Console.WriteLine();
  9. List<Foo> lstFoo =BindDataList<Foo>(dt);
  10. Console.WriteLine("输出实体集合转化");
  11. foreach (Foo obj in lstFoo)
  12. {
  13. Console.Write("名字:{0}, ", obj.Username);
  14. Console.Write("Level:{0}",obj.Level);
  15. Console.WriteLine();
  16. }
  17. Console.Read();
  18. }</span>

结论:

    复杂的事情都是有很多简单是事情组成,一点一点早日摆脱菜鸟。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/253661
推荐阅读
相关标签
  

闽ICP备14008679号