1.DataSet装换为泛型集合(注意T实体的属性其字段类型与dataset字段类型一一对应)

        #region DataSet装换为泛型集合

        /// <summary>
/// 利用反射和泛型
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public static List<T> ConvertToList<T>(DataTable dt)
{ // 定义集合
List<T> ts = new List<T>(); // 获得此模型的类型
Type type = typeof(T);
//定义一个临时变量
string tempName = string.Empty;
//遍历DataTable中所有的数据行
foreach (DataRow dr in dt.Rows)
{
T t = (T)Activator.CreateInstance(typeof(T));
// 获得此模型的公共属性
PropertyInfo[] propertys = t.GetType().GetProperties();
//遍历该对象的所有属性
foreach (PropertyInfo pi in propertys)
{
tempName = pi.Name;//将属性名称赋值给临时变量
//检查DataTable是否包含此列(列名==对象的属性名)
if (dt.Columns.Contains(tempName))
{
// 判断此属性是否有Setter
if (!pi.CanWrite) continue;//该属性不可写,直接跳出
//取值
object value = dr[tempName];
//如果非空,则赋给对象的属性
if (value != DBNull.Value)
pi.SetValue(t, value, null);
}
}
//对象添加到泛型集合中
ts.Add(t);
} return ts; } public static List<T> DataSetToIList<T>(DataSet p_DataSet, int p_TableIndex)
{
if (p_DataSet == null || p_DataSet.Tables.Count < 0)
return null;
if (p_TableIndex > p_DataSet.Tables.Count - 1)
return null;
if (p_TableIndex < 0)
p_TableIndex = 0; DataTable p_Data = p_DataSet.Tables[p_TableIndex];
// 返回值初始化
List<T> result = new List<T>();
for (int j = 0; j < p_Data.Rows.Count; j++)
{
T _t = (T)Activator.CreateInstance(typeof(T));
PropertyInfo[] propertys = _t.GetType().GetProperties();
foreach (PropertyInfo pi in propertys)
{
for (int i = 0; i < p_Data.Columns.Count; i++)
{
// 属性与字段名称一致的进行赋值
if (pi.Name.Equals(p_Data.Columns[i].ColumnName))
{
// DataRowCollection dataRowCollection = new DataRowCollection();
//dataRowCollection.Add(
// p_Data.Columns[i].DataType = pi.GetType(); // 数据库NULL值单独处理
if (p_Data.Rows[j][i] != DBNull.Value)
{
try { pi.SetValue(_t, p_Data.Rows[j][i], null); }
catch { pi.SetValue(_t, int.Parse(p_Data.Rows[j][i].ToString()), null); }
}
else
pi.SetValue(_t, null, null);
break;
}
}
}
result.Add(_t);
}
return result;
} // DataSet装换为泛型集合
public static List<T> DataSetToIList<T>(DataSet p_DataSet, string p_TableName)
{
int _TableIndex = 0;
if (p_DataSet == null || p_DataSet.Tables.Count < 0)
return null;
if (string.IsNullOrEmpty(p_TableName))
return null;
for (int i = 0; i < p_DataSet.Tables.Count; i++)
{
// 获取Table名称在Tables集合中的索引值
if (p_DataSet.Tables[i].TableName.Equals(p_TableName))
{
_TableIndex = i;
break;
}
}
return DataSetToIList<T>(p_DataSet, _TableIndex);
}
#endregion

  

C# DataSet装换为泛型集合的更多相关文章

  1. DataSet装换为泛型集合 222

    #region DataSet装换为泛型集合 /// <summary> /// 利用反射和泛型 /// </summary> /// <param name=" ...

  2. 泛型集合与DataSet相互转换

    一.泛型转DataSet /// <summary> /// 泛型集合转换DataSet /// </summary> /// <typeparam name=" ...

  3. DataSet、DataTable转换List(泛型集合与DataSet互相转换 )

    using System.Data; using System.Reflection; using System.Collections; using System.Collections.Gener ...

  4. DataSet和List<T> 泛型之间互相转换 (转载, 作者写的很好)

    /DataSet与泛型集合间的互相转换 //利用反射机制将DataTable的字段与自定义类型的公开属性互相赋值. //注意:从DataSet到IList<T>的转换,自定义类型的公开属性 ...

  5. 泛型学习第三天——C#读取数据库返回泛型集合 把DataSet类型转换为List<T>泛型集合

    定义一个类: public class UserInfo    {        public System.Guid ID { get; set; } public string LoginName ...

  6. 类库、委托、is as运算符、泛型集合

    类库: 说白了,就是让别人调用你写的方法,并且不让别人看到你是怎么实现的. 如果有功能你不会做,需要别人帮忙,那么你的同事可以帮你写好一个类,然后你来调用这个类中的方法,完成你的项目. 1.C#源代码 ...

  7. C#读取数据库返回泛型集合(DataSetToList)

    一般我们用使用ADO.NET查询数据库返回泛型集合使用SqlDataReader逐行读取数据存入对象 代码 }

  8. 泛型集合、datatable常用数据类型转换Json帮助类

    泛型集合.datatable常用数据类型转换Json帮助类 using System; using System.Data; using System.Configuration; using Sys ...

  9. [c#基础]泛型集合的自定义类型排序

    引用 最近总有种感觉,自己复习的进度总被项目中的问题给耽搁了,项目中遇到的问题,不总结又不行,只能将复习基础方面的东西放后再放后.一直没研究过太深奥的东西,过去一年一直在基础上打转,写代码,反编译,不 ...

随机推荐

  1. vs2015提示中文

    解决方案:   1.找到这个目录 C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework 进入 \v ...

  2. 【USACO 3.2】Factorials(阶层非零尾数)

    题意:输出n的阶层最后一个非0数. 题解:可以把5和2的个数算出来,每次把5和2都除掉,最后乘上比5多出来的2.我的解法是,每次把尾巴的0去掉,并且保留3位,算到最后取尾数就可以了.. /* TASK ...

  3. 3sum问题的解决

    其实一开始想错了,把这个问题想难了,导致没有思路,现在好了很多. 题目: Given an array S of n integers, are there elements a, b, c in S ...

  4. Django进阶(三)

    ORM 众所周知有很多不同的数据库系统,并且其中的大部分系统都包含Python接口,能够让我们更好的利用它们的功能,而这些系统唯一的缺点就是需要你了解SQL,如果你是一个更愿意操纵Python对象,而 ...

  5. CADisplayLink 及定时器的使用

    第一种: 用CADisplayLink可以实现不停重绘. 例子:   CADisplayLink* gameTimer; gameTimer = [CADisplayLink displayLinkW ...

  6. linux动态代码注入

    参考网上文章:http://www.freebuf.com/articles/system/6388.html 按照文章,实现了代码的动态注入,即对一个正在运行的进程,在不重启的情况下执行一段不在原程 ...

  7. theano .dimshuffle

    .dimshuffle 改变输入维度的顺序,返回原始变量的一个view. 输入是一个包含 $[0,1,...,ndim-1]$ 和任意数目的 $'x'$ 的组合: 例如: $('x')$:将标量变成 ...

  8. LR破解版录制手机脚本(一)模拟器录制

    最近在网上听到好多童鞋都在问如何用LR做手机性能测试,恰好自己对这方面也挺感兴趣,经过查阅很多资料,形成此文档以做备注~!如果有感觉我写的不对的地方,敬请指正,谢谢~!     其实自从LR12出来之 ...

  9. Redis连接

    using System; using System.Configuration; using StackExchange.Redis; namespace Redis { public sealed ...

  10. swift实现水仙花数

    //: Playground - noun: a place where people can play import Cocoa for var a in 1...4{ var b = 4 - a ...