加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

数组转DataTable通用类

发布时间:2020-12-17 02:34:02 所属栏目:安全 来源:网络整理
导读:? 在最近做的一个案子里,需要绑定实体数组比如Materiel[]绑定到界面(winform/webform都有),虽然可以直接绑定数组到GridView,但排序,过滤,查找等操作在数组里不是很方便。所以想借用DataTable做数据源。 最简单的方法就是手动建一个DataTable。为每个M

?

在最近做的一个案子里,需要绑定实体数组比如Materiel[]绑定到界面(winform/webform都有),虽然可以直接绑定数组到GridView,但排序,过滤,查找等操作在数组里不是很方便。所以想借用DataTable做数据源。

最简单的方法就是手动建一个DataTable。为每个Materiel的property建一个Column,然后指明其数据类型。建好Table之后,循环为每个Materiel创建一个新行。如果多有几个界面,虽然做起来都差不多,但代码很难重用。

另外数据都是从WebService获取,form不允许直接访问DB,所以也不能通过ADO.net获取DataTable。

经过一段时间的考量后决定见一个专用的Utility类EntityCollectionsConvert,接口为

?

DataTable ToDataTable(object[] entitys);

DataTable?ToDataTable<T>(List<T>?entitys)

实现的原理也比较简单

1.将判断entitys不为空;

2.取出entitys的所有property

3.在DataTable中为每个property添加一列(包括元素类型)

4.为每个entity添加一行。

5.自动生成单元测试,测试,添加到项目中

?

view plain copy to clipboard print ?
  1. ?1??public?static?DataTable?ToDataTable<T>(List<T>?entitys) ??
  2. ?2?????{ ??
  3. ?3????????? ??
  4. ?4?????????//检查实体集合不能为空 ??
  5. ?5?????????if?(entitys?==null||?entitys.Count<1) ??
  6. ?6?????????{ ??
  7. ?7?????????????throw?new?Exception("需转换的集合为空");???????????? ??
  8. ?8?????????} ??
  9. ?9????????? ??
  10. 10?????????//取出第一个实体的所有Propertie ??
  11. 11?????????Type?entityType=?entitys[0].GetType(); ??
  12. 12?????????PropertyInfo[]?entityProperties=?entityType.GetProperties(); ??
  13. 13????????? ??
  14. 14?????????//生成DataTable的structure ??
  15. 15?????????//生产代码中,应将生成的DataTable结构Cache起来,此处略 ??
  16. 16?????????DataTable?dt?=?new?DataTable();???????? ??
  17. 17?????????for?(int?i?=?0;?i?<?entityProperties.Length;?i++) ??
  18. 18?????????{ ??
  19. 19?????????????dt.Columns.Add(entityProperties[i].Name,entityProperties[i].PropertyType); ??
  20. 20?????????} ??
  21. 21? ??
  22. 22?????????//将所有entity添加到DataTable中 ??
  23. 23?????????foreach?(object?entity?in?entitys) ??
  24. 24?????????{ ??
  25. 25?????????????//检查所有的的实体都为同一类型 ??
  26. 26?????????????if?(entity.GetType()!=entityType) ??
  27. 27?????????????{ ??
  28. 28?????????????????throw?new?Exception("要转换的集合元素类型不一致");? ??
  29. 29?????????????} ??
  30. 30?????????????object[]?entityValues?=?new?object[entityProperties.Length]; ??
  31. 31?????????????for?(int?i?=?0;?i?<?entityProperties.Length;?i++) ??
  32. 32?????????????{ ??
  33. 33?????????????????entityValues[i]?=?entityProperties[i].GetValue(entity,?null); ??
  34. 34? ??
  35. 35?????????????} ??
  36. 36?????????????dt.Rows.Add(entityValues); ??
  37. 37?????????} ??
  38. 38?????????return?dt;? ??
  39. 39?????}??

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读