using System.Data;

 using System.Reflection;

 using System.Collections;

 using System.Collections.Generic;

 using System;

 namespace BI.ERP.DAL
{
public class DataSet转换List
{
/// <summary> /// 泛型集合与DataSet互相转换 /// </summary> public class IListDataSet
{
/// <summary> /// 集合装换DataSet /// </summary> /// <param name="list">集合</param> /// <returns></returns> /// 2008-08-01 22:08 HPDV2806 public static DataSet ToDataSet(IList p_List)
{ DataSet result = new DataSet(); DataTable _DataTable = new DataTable(); if (p_List.Count > )
{ PropertyInfo[] propertys = p_List[].GetType().GetProperties(); foreach (PropertyInfo pi in propertys)
{ _DataTable.Columns.Add(pi.Name, pi.PropertyType); } for (int i = ; i < p_List.Count; i++)
{ ArrayList tempList = new ArrayList(); foreach (PropertyInfo pi in propertys)
{ object obj = pi.GetValue(p_List[i], null); tempList.Add(obj); } object[] array = tempList.ToArray(); _DataTable.LoadDataRow(array, true); } } result.Tables.Add(_DataTable); return result; } /// <summary> /// 泛型集合转换DataSet /// </summary> /// <typeparam name="T"></typeparam> /// <param name="list">泛型集合</param> /// <returns></returns> /// 2008-08-01 22:43 HPDV2806 public static DataSet ToDataSet<T>(IList<T> list)
{ return ToDataSet<T>(list, null); } /// <summary> /// 泛型集合转换DataSet /// </summary> /// <typeparam name="T"></typeparam> /// <param name="p_List">泛型集合</param> /// <param name="p_PropertyName">待转换属性名数组</param> /// <returns></returns> /// 2008-08-01 22:44 HPDV2806 public static DataSet ToDataSet<T>(IList<T> p_List, params string[] p_PropertyName)
{ List<string> propertyNameList = new List<string>(); if (p_PropertyName != null) propertyNameList.AddRange(p_PropertyName); DataSet result = new DataSet(); DataTable _DataTable = new DataTable(); if (p_List.Count > )
{ PropertyInfo[] propertys = p_List[].GetType().GetProperties(); foreach (PropertyInfo pi in propertys)
{ if (propertyNameList.Count == )
{ // 没有指定属性的情况下全部属性都要转换 _DataTable.Columns.Add(pi.Name, pi.PropertyType); } else
{ if (propertyNameList.Contains(pi.Name)) _DataTable.Columns.Add(pi.Name, pi.PropertyType); } } for (int i = ; i < p_List.Count; i++)
{ ArrayList tempList = new ArrayList(); foreach (PropertyInfo pi in propertys)
{ if (propertyNameList.Count == )
{ object obj = pi.GetValue(p_List[i], null); tempList.Add(obj); } else
{ if (propertyNameList.Contains(pi.Name))
{ object obj = pi.GetValue(p_List[i], null); tempList.Add(obj); } } } object[] array = tempList.ToArray(); _DataTable.LoadDataRow(array, true); } } result.Tables.Add(_DataTable); return result; } /// <summary> /// DataSet装换为泛型集合 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="p_DataSet">DataSet</param> /// <param name="p_TableIndex">待转换数据表索引</param> /// <returns></returns> /// 2008-08-01 22:46 HPDV2806 public static IList<T> DataSetToIList<T>(DataSet p_DataSet, int p_TableIndex)
{ if (p_DataSet == null || p_DataSet.Tables.Count < ) return null; if (p_TableIndex > p_DataSet.Tables.Count - ) return null; if (p_TableIndex < ) p_TableIndex = ; DataTable p_Data = p_DataSet.Tables[p_TableIndex]; // 返回值初始化 IList<T> result = new List<T>(); for (int j = ; 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 = ; i < p_Data.Columns.Count; i++)
{ // 属性与字段名称一致的进行赋值 if (pi.Name.Equals(p_Data.Columns[i].ColumnName))
{ // 数据库NULL值单独处理 if (p_Data.Rows[j][i] != DBNull.Value) pi.SetValue(_t, p_Data.Rows[j][i], null); else pi.SetValue(_t, null, null); break; } } } result.Add(_t); } return result; } /// <summary> /// DataSet装换为泛型集合 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="p_DataSet">DataSet</param> /// <param name="p_TableName">待转换数据表名称</param> /// <returns></returns> /// 2008-08-01 22:47 HPDV2806 public static IList<T> DataSetToIList<T>(DataSet p_DataSet, string p_TableName)
{ int _TableIndex = ; if (p_DataSet == null || p_DataSet.Tables.Count < ) return null; if (string.IsNullOrEmpty(p_TableName)) return null; for (int i = ; 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); } // <summary> /// DataTable装换为泛型集合 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="p_DataTable">p_DataTable</param> /// <returns></returns> /// 2008-08-01 22:47 HPDV2806
public static IList<T> DataTableToIList<T>(DataTable p_DataTable)
{ if (p_DataTable == null || p_DataTable.Rows.Count < ) return null; //DataTable p_Data = p_DataSet.Tables[p_TableIndex]; // 返回值初始化 IList<T> result = new List<T>(); for (int j = ; j < p_DataTable.Rows.Count; j++)
{ T _t = (T)Activator.CreateInstance(typeof(T)); PropertyInfo[] propertys = _t.GetType().GetProperties(); foreach (PropertyInfo pi in propertys)
{ for (int i = ; i < p_DataTable.Columns.Count; i++)
{ // 属性与字段名称一致的进行赋值 if (pi.Name.Equals(p_DataTable.Columns[i].ColumnName))
{ // 数据库NULL值单独处理 if (p_DataTable.Rows[j][i] != DBNull.Value) pi.SetValue(_t, p_DataTable.Rows[j][i], null); else pi.SetValue(_t, null, null); break; } } } result.Add(_t); } return result; } }
}
}

调用方法

  #region 

          List<Customer_model> CMList = DataSet转换List.IListDataSet.DataTableToIList<Customer_model>(da) as List<Customer_model>;

  #endregion

DataSet、DataTable转换List(泛型集合与DataSet互相转换 )的更多相关文章

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

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

  2. C# DataSet装换为泛型集合

    1.DataSet装换为泛型集合(注意T实体的属性其字段类型与dataset字段类型一一对应) #region DataSet装换为泛型集合 /// <summary> /// 利用反射和 ...

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

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

  4. C#;DataTable添加列;DataTable转List泛型集合;List泛型集合转DataTable泛型集合;

    给DataTable添加列 string sql = "select * from cgpmb order by code"; DataTable dt = Bobole.Data ...

  5. DataSet装换为泛型集合 222

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

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

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

  7. C#中DataTable与泛型集合互转(支持泛型集合中对象包含枚举)

    最近在做WCF,因为是内部接口,很多地方直接用的弱类型返回(DataSet),这其实是一种非常不好的方式,最近将项目做了修改,将所有接口返回值都修改成强类型,这样可以减少很多与客户端开发人员的沟通,结 ...

  8. DataTable填补了实体类返回泛型集合

    坤哥见我昨天找了一段代码,如下面: 略微解释下,这段代码时D层查询结束后,将datatable查询到的结果赋值给实体对象的属性,然后返回实体的过程.坤哥看了之后问我,假设实体有500多个属性,难道也要 ...

  9. 使用泛型集合取代datatable作为返回值实现面向对象

    开会的时候,师父说.我们在机房重构时,尽量不要用datatable作为返回值.改用泛型集合的方式,这样能够实现真正的面向对象. 通过查资料和同学交流,把这个问题给攻克了. 对于泛型集合.我也有了一些认 ...

随机推荐

  1. 类Flask实现前后端交互之代码聊天室

    前言 框架 项目目录及各自功能 流程图 后端 server backend exector 前端 ajax 页面更新 演示 简易应答模式 代理模式处理外部请求 后台日志 总结 前言 这两天老是做梦,全 ...

  2. Delphi XE4 Upate1 更新升级记录.

    一直没时间,这两天折腾了一下 升级了.  其实也可能修了老bug 引入新bug. 呵呵. 看看Emb 都修了什么吧.  我干脆是重新安装的. 虽然官方也有一个单独的update.exe.  从这些bu ...

  3. touch-action属性

    CSS属性 touch-action 用于指定某个给定的区域是否允许用户操作,以及如何响应用户操作(比如浏览器自带的划动.缩放等). /* Keyword values */touch-action: ...

  4. NOIP模拟题 膜法

    题目大意 给定若干组询问求$\sum\limits_{i=l}^r \dbinom{i}{k}$. 最终输出每组询问答案的乘积. 题解 首先把$l,r$分开处理相减,只需要求$\sum\limits_ ...

  5. kali视频(26-30)学习

    第七周 kali视频(26-30)学习 26.KaliSecurity漏洞利用之检索与利用 27.KaliSecurity漏洞利用之Metasploit基础 28.KaliSecurity漏洞利用之M ...

  6. Javascript的异常捕获机制

    這個異常處理機制,之前也只是,但是沒有怎麼用過,用了一次后發現還可以, 和java,python的異常處理機制也很相似 Javascript的异常捕获机制 1.1 基本的try…catch语句 ES3 ...

  7. 【转】C# Socket编程(4)初识Socket和数据流

    [转自:https://www.cnblogs.com/IPrograming/archive/2012/10/15/CSharp_Socket_4.html] 经过前面基础知识作为背景,现在对Soc ...

  8. Spring IOC容器在Web容器中是怎样启动的

    前言 我们一般都知道怎样使用spring来开发web应用后,但对spring的内部实现机制通常不是很明白.这里从源码角度分析下Spring是怎样启动的.在讲spring启动之前,我们先来看看一个web ...

  9. git身份验证失败清除密码缓存

    git config --system --unset credential.helper

  10. React组件传值方式总结

    1. 子组件向父组件传值 父组件Header: import Nav from 'Nav.js'; class Header extends React.Component { constructor ...