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. java中如何获取昨天的当前日期

    在java里,获取昨天的当前日期,可以采用calendar来做,也可以采用date来做:如下: 1.采用calendar来做: Calendar cal=Calendar.getInstance(); ...

  2. C#使用DataSet Datatable更新数据库的三种实现方法

    本文以实例形式讲述了使用DataSet Datatable更新数据库的三种实现方法,包括CommandBuilder 方法.DataAdapter 更新数据源以及使用sql语句更新.分享给大家供大家参 ...

  3. asp.net 之 购物车

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  4. 创建一个叫做People的类: 属性:姓名、年龄、性别、身高 行为:说话、计算加法、改名 编写能为所有属性赋值的构造方法; (2)创建主类: 创建一个对象:名叫“张三”,性别“男”,年龄18岁,身高1.80; 让该对象调用成员方法: 说出“你好!” 计算23+45的值 将名字改为“李四”

    package com.chuoji; public class People { private String name; private int age; private String sex; ...

  5. Linux常用命令(三)

    1.top 说明:即时显示 process 的动态 语法格式:top [-] [d delay] [q] [c] [S] [s] [i] [n] [b]基本参数:d : 改变显示的更新速度,或是在交谈 ...

  6. WPF里的报警闪烁效果

    <esri:MarkerSymbol x:Key="FlashMarkerSymbol" OffsetX="41" OffsetY="41&qu ...

  7. 初识DeepLearning4j

    标签(空格分隔): DeepLearning 在Mac上装DP4j 1. 安装Java 因为DP4j是基于JVM的,所以要先安装一下Java. 使用命令行brew install java 并且在pr ...

  8. C#带小括号的运算

    计算类的封装 jisuan.cs using System; using System.Collections.Generic; using System.Linq; using System.Tex ...

  9. PHP-----数组和常见排序算法

    数组的创建 <?php //php创建数组 //第一种方法 $arr[0]=1; $arr[1]=23; $arr[2]=20; $arr[3]=43; for($i=0;$i<count ...

  10. HTML的基本认识

    就目前学的HTML,感受最深的就是很多标签.HTML不怎么需要逻辑,只需记忆大量标签.不懂的可以参照W3C的文档.里面有很多学习的东西,很受用. 关于CSS基础: 基本选择器: 1.标签选择器    ...