DataTable转换成IList 【转载】
链接:http://www.cnblogs.com/hlxs/archive/2011/05/09/2087976.html#2738813 留着学习
using System;
using System.Collections.Generic;
using System.Collections;
using System.Data; namespace CTHFramework
{ /// <summary>
/// DataTable转换成IList
/// </summary>
/// <typeparam name="T"></typeparam>
public class TableToList<T> where T : class, new()
{
public static IList<T> ToList(DataTable dt, Func<DataRow, T> func)
{
if (dt == null || dt.Rows.Count == )
{
return null;
}
IList<T> list = new List<T>(dt.Rows.Count);
foreach (DataRow dr in dt.Rows)
{
list.Add(func(dr));
}
return list;
}
} public class DataItem
{
public int ID
{
get;
set;
} public string Name
{
get;
set;
} public override string ToString()
{
return string.Format("ID:{0},Name:{1}", ID.ToString(), Name);
}
} static class Program
{
static void Main(string[] args)
{
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("ID", typeof(int)));
dt.Columns.Add(new DataColumn("Name", typeof(string)));
for (int i = ; i < ; i++)
{
DataRow dr = dt.NewRow();
dr["ID"] = i.ToString();
dr["Name"] = "Name" + i.ToString();
dt.Rows.Add(dr);
} IList<DataItem> list = TableToList<DataItem>.ToList(dt, DataRowToDataItem);
foreach (var item in list)
{
Console.WriteLine(item.ToString());
}
Console.Read();
} static DataItem DataRowToDataItem(DataRow dr)
{
return new DataItem { ID = Convert.ToInt32(dr["ID"]), Name = dr["Name"].ToString() };
} }
}
{
var tblName = $"dbo.{tableName}";
var tran = (SqlTransaction)transaction;
using (var bulkCopy = new SqlBulkCopy(conn as SqlConnection ?? throw new InvalidOperationException(), SqlBulkCopyOptions.TableLock, tran))
{
var enumerable = entityList as T[] ?? entityList.ToArray();
if (isEnabled)
{
foreach (var item in enumerable)
{
item.SetPropertyMethod();
}
}
bulkCopy.BatchSize = enumerable.ToList().Count;
bulkCopy.DestinationTableName = tblName;
var table = new DataTable();
DapperExtensions.Sql.ISqlGenerator sqlGenerator = new SqlGeneratorImpl(new DapperExtensionsConfiguration());
var classMap = sqlGenerator.Configuration.GetMap<T>();
var props = classMap.Properties.Where(x => x.Ignored == false).ToArray();
foreach (var propertyInfo in props)
{
bulkCopy.ColumnMappings.Add(
propertyInfo.Name
,
propertyInfo.Name
);
table.Columns.Add(
propertyInfo.Name
, Nullable.GetUnderlyingType(propertyInfo.PropertyInfo.PropertyType) ?? propertyInfo.PropertyInfo.PropertyType);
}
var values = new object[props.Count()];
foreach (var itemm in enumerable)
{
for (var i = 0; i < values.Length; i++)
{
values[i] = props[i].PropertyInfo.GetValue(itemm, null);
}
table.Rows.Add(values);
}
bulkCopy.WriteToServer(table);
}
}
DataTable转换成IList 【转载】的更多相关文章
- DataTable转换成IList<T>的简单实现
DataTable的无奈 很多时候,我们需要去操作DataTable.但DataTable的操作,实在是太不方便了.Linq?lambda表达式?统统没有... 特别是对现有结果集做进一步筛选,这样的 ...
- C# 中 DataTable转换成IList
在用C#作开发的时候经常要把DataTable转换成IList:操作DataTable比较麻烦,把DataTable转换成IList,以对象实体作为IList的元素,操作起来就非常方便. 注意:实体的 ...
- DataTable转换成IList
//文章出处: http://www.cnblogs.com/hlxs/archive/2011/05/09/2087976.html DataTable转换成IList 在用C#作开发的时候经常要把 ...
- asp.net dataTable转换成Json格式
/// <summary> /// dataTable转换成Json格式 /// </summary> /// <param name="dt"> ...
- C# DataTable转换成实体列表 与 实体列表转换成DataTable
/// <summary> /// DataTable转换成实体列表 /// </summary> /// <typeparam name="T"&g ...
- DataTable转换成匿名类的List类型
DataTable转换成匿名类的List类型 因为匿名类是不能够 Activator.CreateInstance进行反射实例化的 /// <summary> /// 匿名类的转换方式 ...
- DataTable 转换成 Json的3种方法
在web开发中,我们可能会有这样的需求,为了便于前台的JS的处理,我们需要将查询出的数据源格式比如:List<T>.DataTable转换为Json格式.特别在使用Extjs框架的时候,A ...
- 将DataTable转换成CSV文件
DataTable用于在.net项目中,用于缓存数据,DataTable表示内存中数据的一个表.CSV文件最早用在简单的数据库里,由于其格式简单,并具备很强的开放性,所以起初被扫图家用作自己图集的标记 ...
- 将DataSet(DataTable)转换成JSON格式(生成JS文件存储)
public static string CreateJsonParameters(DataTable dt) { /**/ /**/ /**/ /* /*********************** ...
随机推荐
- jQuery事件处理(三)
继续了解jQuery对浏览器兼容的处理 1.keyHooks对键盘按键的封装 keyHooks: { // 一些键盘相关的属性 props: "char charCode key keyCo ...
- Python 2.7.6 安装lxml模块[ubuntu14.04 LTS]
lxml --->首字母是字母l,不是数字1 lxml 2.x : https://pypi.python.org/pypi/lxml/2.3 1xml官网:http://lxml.de/ 一 ...
- java (10) 集合类
1.集合概述 集合按照存储结构可以分为两类,即单列集合 Collection 和双列集合 Map. * Collection 用于存储一系列符合某种规则的元素,它有两个重要的自接口,分别是List和S ...
- sencha touch 开发环境搭建(视频)
图文文章参见: http://www.cnblogs.com/mlzs/p/3420900.html 视频共享链接 百度:http://pan.baidu.com/s/1mg5DpS8
- oracle数据库用户加锁和解锁
oracle数据库安装好之后,scott之类的用户默认情况下是被锁住的,无法使用scott用户登录数据库.使用有alter user数据库权限的用户登陆,角色选sysdba,执行以下命令: 解锁命令: ...
- minix中二分查找bsearch的实现
在看minix中bsearch实现的源代码之前,先学习一下C 语言中void类型以及void*类型的使用方法与技巧. void的含义: void的字面意思是“无类型”,void *则为“无类型指针”, ...
- Docker Swarm——集群管理
前言 之前在总结docker machine的时候,当时对docker理解还不够深入,甚至还不知道 docker machine 与 docker swarm 的区别. 在查阅资料以及官方文档之后,今 ...
- postgresql----文本搜索类型和检索函数
postgresql提供两种数据类型用于支持全文检索:tsvector类型产生一个文档(以优化全文检索形式)和tsquery类型用于查询检索. tsvector的值是一个无重复的lexemes排序列表 ...
- scala - fold,aggregate,iterator
import org.json4s._ import org.json4s.jackson._ import org.json4s.jackson.JsonMethods._ import org.j ...
- 被included或者被required的文件都来自哪里呢
过PHP,你可以使用不同函数帮助你重用代码.具体用到的函数取决于你打算重用的内容. 主函数如下: * include() and include_once() * require() and requ ...