在最近做的一个案子里,需要绑定实体数组比如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.自动生成单元测试,测试,添加到项目中

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

转载于:https://www.cnblogs.com/shinn/archive/2008/11/12/1332323.html

不足百行代码 实体数组转DataTable通用类相关推荐

  1. 猜猜乐游戏php源码,C/C++百行代码实现热门游戏消消乐功能的示例代码

    游戏设计 首先我们需要使用第三方框架,这里我使用的是sfml,不会使用sfml在我的上几篇文章当中-扫雷(上)有详细的开发环境搭建介绍 首先准备图片资源 一张背景图片,一张宝石图片 窗口初始化加载图片 ...

  2. php消消乐代码,C/C++百行代码实现热门游戏消消乐功能的示例代码

    游戏设计 首先我们需要使用第三方框架,这里我使用的是sfml,不会使用sfml在我的上几篇文章当中-扫雷(上)有详细的开发环境搭建介绍 首先准备图片资源 一张背景图片,一张宝石图片 窗口初始化加载图片 ...

  3. js 监听 安卓事件_百行代码实现js事件监听实现跨页面数据传输

    百行代码实现js事件监听实现跨页面数据传输 使用场景 类似消息队列的使用场景,支持同页面和跨页面通信,发送消息和接收消息 技术原理 跨页面通信: 基于事件监听,通过监听 storage事件监听回调机制 ...

  4. 鱼佬:百行代码入手数据挖掘赛!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:鱼佬,武汉大学,Datawhale成员 本实践以科大讯飞xData ...

  5. 百行代码打造一个DI容器(支持瞬时生命周期、单利生命周期、构造函数自动注入、属性自动注入、字段自动注入)...

    DI注入在.Net平台是非常流行的, 很多项目都用到了,很多开发人员或多或少也用到DI容器了,感觉DI容器很神奇很厉害.本文将通过百行代码展示DI容器的内部核心代码(包括组件的瞬时生命周期.单利生命周 ...

  6. 基于Ganos百行代码实现亿级矢量空间数据在线可视化

    简介: 本文介绍如何使用RDS PG或PolarDB(兼容PG版或Oracle版)的Ganos时空引擎提供的数据库快显技术,仅用百行代码实现亿级海量几何空间数据的在线快速显示和流畅地图交互,且无需关注 ...

  7. Kaggle—So Easy!百行代码实现排名Top 5%的图像分类比赛

    北京 上海巡回站 | NVIDIA DLI深度学习培训 2018年1月26/1月12日 NVIDIA 深度学习学院 带你快速进入火热的DL领域 阅读全文                        ...

  8. python图像分类代码_Kaggle—So Easy!百行代码实现排名Top 5%的图像分类比赛

    Kaggle-So Easy!百行代码实现排名Top 5%的图像分类比赛 作者:七月在线彭老师 说明:本文最初由彭老师授权翟惠良发布在公众号"七月在线实验室"上,现再由July重新 ...

  9. Python百日百行代码挑战-day8,day9,day10,游戏实战系列-五子棋

    Python百日百行代码挑战-day8,day9,day10,游戏实战系列-五子棋 写在前面 需要用到的工具包和参考 游戏设定 初始化 切换下棋方 判断五子连珠(核心) 鼠标点击流程事件 成品展示 打 ...

  10. python写百行代码可运行_56 岁潘石屹学俩月 Python ,写下百行代码

    原标题:56 岁潘石屹学俩月 Python ,写下百行代码 By 超神经 内容导读:跨界王潘石屹在近期迷上了编程,不仅高调宣布学习 Python,拜老师,还隔三差五晒出自己的「编程课作业」,和网友进行 ...

最新文章

  1. 【java】兴唐第二十五节课(异常和log4j的使用)
  2. (转载)如何学好iphone游戏开发
  3. 2021年5G发展展望
  4. Exception in thread http-bio-80exec-1 java.lang.OutOfMemoryError: PermGen s解决方案
  5. 【.NET】正则表达式笔记
  6. Nginx出现“413 Request Entity Too Large”错误解决方法
  7. Activity 切换动画
  8. Spring过滤器组件自动扫描
  9. python的简介和入门
  10. java 并发demo_《Java并发编程实践》中4.3.5章demo的一个疑问?
  11. 选购光纤交换机时需要注意光模块的哪些配置?
  12. 《MySQL——给长字符串加索引》
  13. SQLServer无法使用特殊主体'sa'的解决
  14. maven 整体打包_Maven打包方式整理
  15. 最大矩阵和 2015-05-13 21:23 8人阅读 评论(0) 收藏...
  16. IE9相比IE8丢失了什么?
  17. 史上最全面的Javaweb完整学习教程,Java小白必备!
  18. AE zoom to selected 地图刷新
  19. 数据挖掘在淘宝CRM中的应用
  20. 车载诊断系统-OBD

热门文章

  1. Azure Machine Learning的新特性
  2. EventBus (一) 使用详解——初步使用EventBus
  3. Tomcat7.0下配置javabeanservlet路径问题
  4. 【转载】程序员面对下列技术问题,如何做决策
  5. 【翻译】Robust Lane Detection and Tracking in Challenging Scenarios
  6. 4月24 利用shell脚本添加环境变量
  7. 6大常见排序算法 python实现
  8. 设计模式 - 模版方法
  9. nginx安装错误:c compiler cc is not found
  10. 我的最爱Lambda演算——开篇