完整DataTable与IList互换(转)
public class CollectionHelper
{
private CollectionHelper()
{
} 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)
{
if (table == null)
{
return null;
} List<DataRow> rows = new List<DataRow>(); foreach (DataRow row in table.Rows)
{
rows.Add(row);
} return ConvertTo<T>(rows);
} public static T CreateItem<T>(DataRow row)
{
T obj = default(T);
if (row != null)
{
obj = Activator.CreateInstance<T>(); foreach (DataColumn column in row.Table.Columns)
{
PropertyInfo prop = obj.GetType().GetProperty(column.ColumnName);
try
{
object value = row[column.ColumnName];
prop.SetValue(obj, value, null);
}
catch
{
// You can log something here
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;
}
} To see the full code in action, check this sample out: public class MyClass
{
public static void Main()
{
List<Customer> customers = new List<Customer>(); for (int i = ; i < ; i++)
{
Customer c = new Customer();
c.Id = i;
c.Name = "Customer " + i.ToString(); customers.Add(c);
} DataTable table = CollectionHelper.ConvertTo<Customer>(customers); foreach (DataRow row in table.Rows)
{
Console.WriteLine("Customer");
Console.WriteLine("---------------"); foreach (DataColumn column in table.Columns)
{
object value = row[column.ColumnName];
Console.WriteLine("{0}: {1}", column.ColumnName, value);
} Console.WriteLine();
} RL();
} #region Helper methods private static void WL(object text, params object[] args)
{
Console.WriteLine(text.ToString(), args);
} private static void RL()
{
Console.ReadLine();
} private static void Break()
{
System.Diagnostics.Debugger.Break();
} #endregion
}
完整DataTable与IList互换
完整DataTable与IList互换(转)的更多相关文章
- 反射List<M> To DataTable|反射IList To DataTable|反射 DataTable To List<M>
将DataTable集合反射获取 List<M> /// <summary> /// 根据DataTable集合反射获取 List<M> /// </summ ...
- 【2017001】IList转DataTable、DataTable转IList
IList转DataTable.DataTable转IList using System; using System.Collections.Generic; using System.Compone ...
- Winform开发常用控件之DataGridView的简单数据绑定——代码绑定DataSet、DataTable、IList、SqlDataReader
前文介绍了Winform为DataGridView提供的数据自动绑定功能,下面介绍一下采用代码的数据绑定 1.用DataSet和DataTable为DataGridView提供数据源 先上代码 pri ...
- DataTable与List互换
public static class List2DataTable { #region "Convert Generic List to DataTable" /// <s ...
- 【笔记】DataTable或IList使用GroupBy方法的lamda表达式
DataTable GroupBy的用法 var result = dt.AsEnumerable(). GroupBy(g => new { StaffID = g.Field<stri ...
- C#高效导出Excel(IList转DataTable,DataSet)
微软的Excel操作类导出Excel会很慢,此方法简单的把表中内容以字符串的形式写入到Excel中,用到的一个技巧就是"\t". C#中的\t相当于Tab键,写入到Excel中时就 ...
- 将SqlDataReader 数据集转化为datatbale ,在将datatable 转化为iList
public IList GetModelList(string tablename, string where) { IList list = null; DataTable dataTable = ...
- IList,List<T>转换为DataTable 常用收藏
List<info> infos = Dal.GetInfos(); DataTable dt = new DataTable(); dt.Columns.Add("cName& ...
- 完整的系统帮助类Utils
//来源:http://www.cnblogs.com/yuangang/p/5477324.html using System; using System.Collections.Generic; ...
随机推荐
- Providers、Controller 、Service、DirectiveFactory
Providers 是唯一一种你可以传进 .config() 函数的 service.当你想要在 service 对象启用之前,先进行模块范围的配置,那就应该用 provider Controller ...
- 转:自建CDN防御DDoS(1, 2, 3)infoq
本文中提到的要点: 1. 针对恶意流的应对方法与策略.(基本上,中级的,顶级的) 2. IP分类的脚本 3. 前端proxy工具的选择与使用. 4. 开源日志系统的选择与比较. (http:/ ...
- Application Loader上传app时报错:the bundle identifier cannot be changed from the current value
报错如图: 解决:用info.plist中的bundle identifier生成发布证书(Distribution),如图:
- 微信小程序个人理解
1:小程序不是用HTML5开发,它是由微信全新定义的规范,是基于XML+JS的,不支持也不兼容HTML,兼容受限的部分CSS写法.(wxml) weixin markup language 2:小程序 ...
- LINUX下查看php运行的用户
<?php echo shell_exec("id -a"); ?> 打开网页,显示 uid=2(daemon) gid=2(daemon) groups=2(daem ...
- IOS中调整UI控件位置和尺寸
1.frame(修改位置和尺寸):以父控件左上角为坐标原点,在其父控件中的位置和尺寸. //frame属性中的坐标点不能直接修改 CGRect tempFrame = self.v.frame; // ...
- js利用数组length属性清空和截短数组
1.使用length清空数组: 代码如下 复制代码 <script> var arr1 = ['aaa','bbbb','http://www.111cn.net']; ale ...
- [老老实实学WCF] 第七篇 会话
老老实实学WCF 第七篇 会话 通过前几篇的学习,我们已经掌握了WCF的最基本的编程模型,我们已经可以写出完整的通信了.从这篇开始我们要深入地了解这个模型的高级特性,这些特性用来保证我们的程序运行的高 ...
- CookieHelper JS封装Cookie 存取方法
微信的一些页面会去获取授权,然后在回调到页面,但是这样的话通过url传递的参数有可能丢失掉,我采用存储cookie的方式来传值 建一个CookieHelper.js文件 function Cookie ...
- format——MATLAB
format:设置输出格式 对浮点性变量,缺省为format short. format并不影响matlab如何计算和存储变量的值.对浮点型变量的计算,即单精度或双精度,按合适的浮点精度进行,而不论变 ...