1. DataTable转IList

 public class DataTableToList<T>whereT :new()

 {

 ///<summary>

 ///利用反射将Datatable转换成List模型

 ///</summary>

 ///<param name="dt"></param>

 ///<returns></returns>

 public static List<T> ConvertToList(DataTabledt)

 {

 List<T> list =newList<T>();

 Typetype =typeof(T);

 stringtempName =string.Empty;

 foreach(DataRowdrindt.Rows)

 {

 T t =newT();

 PropertyInfo[] propertys =
t.GetType().GetProperties(); foreach(PropertyInfopiinpropertys) { tempName = pi.Name; if(dt.Columns.Contains(tempName)) { if(!pi.CanWrite) { continue; } var value = dr[tempName]; if(value !=DBNull.Value) { pi.SetValue(t, value,null); } } } list.Add(t); } returnlist; } }

2. SqlDataReader转IList

         /// <summary>
/// 判断SqlDataReader是否存在某列
/// </summary>
/// <param name="dr">SqlDataReader</param>
/// <param name="columnName">列名</param>
/// <returns></returns>
private bool readerExists(SqlDataReader dr, string columnName)
{ dr.GetSchemaTable().DefaultView.RowFilter = "ColumnName= '" + columnName + "'"; return (dr.GetSchemaTable().DefaultView.Count > ); } ///<summary>
///利用反射和泛型将SqlDataReader转换成List模型
///</summary>
///<param name="sql">查询sql语句</param>
///<returns></returns> public IList<T> ExecuteToList<T>(string sql) where T : new() {
IList<T> list; Type type = typeof (T); string tempName = string.Empty; using (SqlDataReader reader = ExecuteReader(sql))
{
if (reader.HasRows)
{
list = new List<T>();
while (reader.Read())
{
T t = new T(); PropertyInfo[] propertys = t.GetType().GetProperties(); foreach (PropertyInfo pi in propertys)
{
tempName = pi.Name; if (readerExists(reader, tempName))
{
if (!pi.CanWrite)
{
continue;
}
var value = reader[tempName]; if (value != DBNull.Value)
{
pi.SetValue(t, value, null);
} } } list.Add(t); }
return list;
}
}
return null;
}

3、结果集从存储过程获取

   /// <summary>
/// 处理存储过程
/// </summary>
/// <param name="spName">存储过程名</param>
/// <param name="parameters">参数数组</param>
/// <returns>sql数据流</returns>
protected virtual SqlDataReader ExecuteReaderSP(string spName, ArrayList parameters)
{
SqlDataReader result = null;
cmd.CommandText = spName;
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Clear();
if (parameters != null)
{
foreach (SqlParameter param in parameters)
{
cmd.Parameters.Add(param);
}
}
try
{
Open();
result = cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
catch (Exception e)
{
if (result != null && (!result.IsClosed))
{
result.Close();
}
LogHelper.WriteLog("\r\n方法异常【ExecuteReaderSP(string spName, ArrayList parameters)】" + spName, e);
throw new Exception(e.Message);
}
return result;
}
 <strong>      </strong> ///<summary>
///利用反射将SqlDataReader转换成List模型
///</summary>
///<param name="spName">存储过程名称</param>
///<returns></returns> public IList<T> ExecuteQueryListSP<T>(string spName, params SqlParameter[] listParams) where T : new()
{
IList<T> list; Type type = typeof(T); string tempName = string.Empty; using (SqlDataReader reader = ExecuteReaderSP(spName, new ArrayList(listParams)))
{
if (reader.HasRows)
{
list = new List<T>();
while (reader.Read())
{
T t = new T(); PropertyInfo[] propertys = t.GetType().GetProperties(); foreach (PropertyInfo pi in propertys)
{
tempName = pi.Name; //for (int intField = 0; intField < reader.FieldCount; intField++)
//{//遍历该列名是否存在
//} if (readerExists(reader, tempName))
{
if (!pi.CanWrite)
{
continue;
}
var value = reader[tempName]; if (value != DBNull.Value)
{
pi.SetValue(t, value, null);
} } } list.Add(t); }
return list;
}
}
return null;
}

作者:dasihg

转载:http://blog.csdn.net/dasihg/article/details/8943811

利用反射将Datatable、SqlDataReader转换成List模型的更多相关文章

  1. 利用反射把数据集合转换成List

    ---ResultSet数据集 public static List toList(ResultSet rs, Class cls) { List list = new ArrayList(); tr ...

  2. C# 利用反射动态将字符串转换成属性对应的类型值

    /// <summary> /// 为指定对象分配参数 /// </summary> /// <typeparam name="T">对象类型& ...

  3. C# 将DataTable数据源转换成实体类

    using System; using System.Collections.Generic; using System.Data; using System.Reflection; /// < ...

  4. 利用反射把DataTable自动赋值到Model实体(自动识别数据类型)

    转:http://www.cnblogs.com/the7stroke/archive/2012/04/22/2465591.html using System.Collections.Generic ...

  5. C 利用移位运算符 把十进制转换成二进制

    #include <stdio.h> int main(void){ //利用移位运算符 把十进制转换成二进制 int c; printf("输入数字:");//8 s ...

  6. 「新手必看」Python+Opencv实现摄像头调用RGB图像并转换成HSV模型

    在ROS机器人的应用开发中,调用摄像头进行机器视觉处理是比较常见的方法,现在把利用opencv和python语言实现摄像头调用并转换成HSV模型的方法分享出来,希望能对学习ROS机器人的新手们一点帮助 ...

  7. h5模型文件转换成pb模型文件

      本文主要记录Keras训练得到的.h5模型文件转换成TensorFlow的.pb文件 #*-coding:utf-8-* """ 将keras的.h5的模型文件,转换 ...

  8. 【tensorflow-v2.0】如何将模型转换成tflite模型

    前言 TensorFlow Lite 提供了转换 TensorFlow 模型,并在移动端(mobile).嵌入式(embeded)和物联网(IoT)设备上运行 TensorFlow 模型所需的所有工具 ...

  9. 利用反射实现DataTable 与 List<T> 转换

    今天上班不太忙,就想着总结一下反射.扩展方法.以及lambda表达式的用法,自己就写了个小DEMO记录一下,希望各位大牛们看到后觉得不对的地方请及时提出.这篇文章中我只说明我的用法,作为一个备忘,基本 ...

随机推荐

  1. 虚拟主机无法使用fsockopen操作处理方法

    一.如何禁用fsockopen()下面是两种常用的禁用fsockopen的方法.1.修改php.ini,将 disable_functions = 后加入 fsockopen2.修改php.ini,将 ...

  2. adpatch options=hotpatch

    --no need to shutdown application and no need to enable maintenance mode adpatch options=hotpatch fi ...

  3. zigbee学习之路(五):定时器1(查询方式)

    一.前言 今天,我们来学习几乎所有单片机都有的功能,定时器的使用,定时器对单片机来说是相当重要的,有了它,单片机就可以进行一些复杂的工作. 二.原理与分析 谈到定时器的控制,我们最先想到的是要给它赋初 ...

  4. 一步一步教你编写与搭建自动化测试框架——python篇

    [本文出自天外归云的博客园] 这两天用python写了一个自动化测试框架,取名为Auty.准备用来做Web方面的接口测试,以下为Auty框架一步一步的搭建过程——

  5. 数据库事务的特性(ACID)

    数据库的事务是数据库中一系列(增删查改)操作的集合. 一般来说,事务的范围根据业务而定,比如转账.修改个人信息 转账:从A账户将200元转移到B账户 从A账户中扣除200元 将200元加入到B账户中 ...

  6. 我的android学习经历31

    最近把四大组件,网络编程,以及一些常用的控件都学完了,不过感觉还不是特别牢固,所以决定再花一点时间重新过一遍,你们有这样的感觉吗?

  7. 简单方法判断JavaScript对象为null或者属性为空

    对已声明但未初始化的和未声明的变量执行typeof,都返回undefined,null表示一个空对象指针,typeof操作会返回object 首先说下null与undefined区别: 对已声明但未初 ...

  8. Selenium Web 自动化 - 项目实战(三)

    Selenium Web 自动化 - 项目实战(三) 2016-08-10 目录 1 关键字驱动概述2 框架更改总览3 框架更改详解  3.1 解析新增页面目录  3.2 解析新增测试用例目录  3. ...

  9. 【Todo】【读书笔记】机器学习-周志华

    书籍位置: /Users/baidu/Documents/Data/Interview/机器学习-数据挖掘/<机器学习_周志华.pdf> 一共442页.能不能这个周末先囫囵吞枣看完呢.哈哈 ...

  10. Makefile-入门与进阶【转】

    from:here 一.入门 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的 ...