【2017001】IList转DataTable、DataTable转IList
IList转DataTable、DataTable转IList
 using System;
 using System.Collections.Generic;
 using System.ComponentModel;
 using System.Data;
 using System.Linq;
 using System.Reflection;
 using System.Text;
 namespace Framework.Utility
 {
     public static class DataTableHelper
     {
         public static DataTable ConvertTo<T>(IList<T> list)
         {
             DataTable table = CreateTable<T>();
             Type entityType = typeof(T);
             PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(entityType);
             foreach (T item in list)
             {
                 DataRow row = table.NewRow();
                 foreach (PropertyDescriptor prop in properties)
                     row[prop.Name] = prop.GetValue(item);
                 table.Rows.Add(row);
             }
             return table;
         }
         public static IList<T> ConvertTo<T>(IList<DataRow> rows)
         {
             IList<T> list = null;
             if (rows != null)
             {
                 list = new List<T>();
                 foreach (DataRow row in rows)
                 {
                     T item = CreateItem<T>(row);
                     list.Add(item);
                 }
             }
             return list;
         }
         public static IList<T> ConvertTo<T>(DataTable table)
         {
             try
             {
                 if (table == null)
                     return null;
                 List<DataRow> rows = new List<DataRow>();
                 foreach (DataRow row in table.Rows)
                     rows.Add(row);
                 return ConvertTo<T>(rows);
             }
             catch(Exception ex)
             {
                 string err = ex.ToString();
                 return null;
             }
         }
         public static T CreateItem<T>(DataRow row)
         {
             string columnName;
             T obj = default(T);
             if (row != null)
             {
                 obj = Activator.CreateInstance<T>();
                 foreach (DataColumn column in row.Table.Columns)
                 {
                     columnName = column.ColumnName;
                     //Get property with same columnName
                     PropertyInfo prop = obj.GetType().GetProperty(columnName);
                     if (prop == null) continue;
                     ) continue;
                     try
                     {
                         //Get value for the column
                         object value = (row[columnName].GetType() == typeof(DBNull))
                         ? null : row[columnName];
                         //Set property value
                         if (prop.CanWrite)    //判断其是否可写
                             prop.SetValue(obj, value, null);
                     }
                     catch
                     {
                         throw;
                     }
                 }
             }
             return obj;
         }
         public static DataTable CreateTable<T>()
         {
             Type entityType = typeof(T);
             DataTable table = new DataTable(entityType.Name);
             PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(entityType);
             foreach (PropertyDescriptor prop in properties)
                 table.Columns.Add(prop.Name, prop.PropertyType);
             return table;
         }
         /// <summary>
         /// datatable 转换成list
         /// 调用方法:List<Entity> list = DataTableHelper.ConvertToEx<Entity>(dt);
         /// </summary>
         /// <typeparam name="T"></typeparam>
         /// <param name="dt"></param>
         /// <returns></returns>
         public static List<T> ConvertToEx<T>(DataTable dt) where T : new()
         {
             if (dt == null) return null;
             ) return null;
             List<T> list = new List<T>();
             Type type = typeof(T);
             PropertyInfo[] propertyInfos = type.GetProperties();  //获取泛型的属性
             List<DataColumn> listColumns = dt.Columns.Cast<DataColumn>().ToList();  //获取数据集的表头,以便于匹配
             T t;
             foreach (DataRow dr in dt.Rows)
             {
                 t = new T();
                 foreach (PropertyInfo propertyInfo in propertyInfos)
                 {
                     try
                     {
                         DataColumn dColumn = listColumns.Find(name => name.ToString().ToUpper() == propertyInfo.Name.ToUpper());  //查看是否存在对应的列名
                         if (dColumn != null)
                             propertyInfo.SetValue(t, dr[propertyInfo.Name], null);  //赋值
                     }
                     catch (Exception ex)
                     {
                         throw new Exception(ex.Message);
                     }
                 }
                 list.Add(t);
             }
             return list;
         }
     }
 }
【2017001】IList转DataTable、DataTable转IList的更多相关文章
- DataTable转换成IList<T>的简单实现
		DataTable的无奈 很多时候,我们需要去操作DataTable.但DataTable的操作,实在是太不方便了.Linq?lambda表达式?统统没有... 特别是对现有结果集做进一步筛选,这样的 ... 
- C# IList<T>转为DataTable
		public class WebUtil { /// <summary> /// 转换IList<T>为DataTable/// </summary> /// &l ... 
- C# 中 DataTable转换成IList
		在用C#作开发的时候经常要把DataTable转换成IList:操作DataTable比较麻烦,把DataTable转换成IList,以对象实体作为IList的元素,操作起来就非常方便. 注意:实体的 ... 
- DataTable转换成IList 【转载】
		链接:http://www.cnblogs.com/hlxs/archive/2011/05/09/2087976.html#2738813 留着学习 using System; using Syst ... 
- DataTable转换成IList
		//文章出处: http://www.cnblogs.com/hlxs/archive/2011/05/09/2087976.html DataTable转换成IList 在用C#作开发的时候经常要把 ... 
- 将SqlDataReader 数据集转化为datatbale ,在将datatable 转化为iList
		public IList GetModelList(string tablename, string where) { IList list = null; DataTable dataTable = ... 
- [DataTable] datatable根据表中的字段进行排序
		private DataTable SortTable(DataTable dt,string[] pids) { DataTable dt0 = dt.Clone(); //复制原表结构 ;i< ... 
- MVC中一般为什么用IQueryable而不是用IList?用IQueryable比IList好在哪?
		IList(IList<T>)会立即在内存里创建持久数据,这就没有实现"延期执行(deferred execution)",如果被加载的实体有关联实体(associat ... 
- 完整DataTable与IList互换(转)
		public class CollectionHelper { private CollectionHelper() { } public static DataTable ConvertTo< ... 
随机推荐
- div中嵌套div中使用margin-top失效问题
			div中嵌套div中使用margin-top失效问题 
- JavaScript实现邮箱后缀提示功能
			先来个基础的 需求 根据下面需求实现如示意图所示的邮箱输入提示功能,注意,根据要求只需实现下面功能 当用户没有任何输入时,提示框消失 当用户输入字符后,显示提示框,并且把用户输入的内容自动拼上邮箱后缀 ... 
- sass变量
			sass变量用法 1.sass变量必须以$符开头,后面紧跟着变量名 2.变量值和变量名之间就需要使用冒号(:)分隔开(就像CSS属性设置一样) 3.如果值后面加上!default则表示默认值 默认变量 ... 
- 实现移动端touch事件的横向滑动列表效果
			要实现手机端横向滑动效果并不难,了解实现的原理及业务逻辑就很容易实现.原理:touchstart(手指按下瞬间获取相对于页面的位置)——>touchmove(手指移动多少,元素相应移动多少). ... 
- postgres备份数据库
			1. psql --help psql is the PostgreSQL interactive terminal. Usage: psql [OPTION]... [DBNAME [USERNAM ... 
- OSGEarth加载 geoserver 发布 TMS
			geoserver配好数据并用自带的gwc切片好后, 访问 http://localhost:9999/geoserver/gwc/service/tms/1.0.0/ 在OsgEarth的earth ... 
- ArcGIS Server 10.1发布要素服务(FeatureLayer server)时遇到的数据库注册问题
			在发布要素服务的最后一步遇到了一个问题: SEVERITY STATUS CODE DESCRIPTION NAME TYPE DATA FRAME High Unresolved 00090 Fea ... 
- maven学习(四)maven的生命周期
			官网:http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html maven有三套相互独立的生命周期, ... 
- Android学习——Service(二)
			今天来介绍Service的第二种使用方式,Bind方式 Bind方式启动服务 Bind方式和Start方式启动很类似,都是通过Intent来启动,不同的是,Bind方式需要传入三个参数,如下: Int ... 
- mysql5.7
			原文 http://imysql.com/2015/07/08/mysql-57-new-feature-part-3.shtml 主题 MySQL 本文将和大家一起分享下5.7的新特性,不过我们要 ... 
