将List<T>转化成 DataTable--调整可空类型的转化错误
加载表结构并保持成XML
string cmdText = @"select * from kb_lable_temp where 1=2";
using (SqlConnection conn = new SqlConnection(DBCtx.ConnStr))
{
DataTable dt = new DataTable();
SqlCommand cmd = new SqlCommand(cmdText,conn);
conn.Open();
using (var dr = cmd.ExecuteReader(CommandBehavior.SchemaOnly))
{
dt.Load(dr);
dt.WriteXmlSchema("C:\\xxx.xml");
} }
DataTable dt3 = new DataTable();
dt3.ReadXmlSchema("C:\\xxx.xml");
List<T>到DataTable
using System.Data;
using System.Collections.Generic;
using System.Reflection;
using System;
using System.Collections;
namespace F.Studio.Util
{
public static class DataTableExtensions
{
/// <summary>
/// 转化一个DataTable
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="list"></param>
/// <returns></returns>
public static DataTable ToDataTable<T>(this IEnumerable<T> list,params string[] tableName)
{
//创建属性的集合
List<PropertyInfo> pList = new List<PropertyInfo>();
//获得反射的入口
Type type = typeof(T);
string tname = "Table1";
if (tableName.Length >= )
{
tname = tableName[];
}
DataTable dt = new DataTable(tname);
//把所有的public属性加入到集合 并添加DataTable的列
Array.ForEach<PropertyInfo>(type.GetProperties(), p =>
{
pList.Add(p);
var theType=p.PropertyType;
//处理可空类型
if (theType.IsGenericType && theType.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
{
dt.Columns.Add(p.Name,Nullable.GetUnderlyingType(theType));
}
else
{
dt.Columns.Add(p.Name, theType);
}
});
foreach (var item in list)
{
//创建一个DataRow实例
DataRow row = dt.NewRow();
//给row 赋值
pList.ForEach(p =>
{
var v=p.GetValue(item, null);
row[p.Name] = v==null ? DBNull.Value : v; });
//加入到DataTable
dt.Rows.Add(row);
}
return dt;
}
}
}
将List<T>转化成 DataTable--调整可空类型的转化错误的更多相关文章
- 将DataSet转化成XML格式的String类型,再转化回来。
		/// <summary> /// 获取DataSet的Xml格式 /// </summary> public static string GetDataSetXml(this ... 
- DataTable调整顺序
		DataTable中手动调整列的顺序 DataTable中手动调整列的顺序(列序,reorder,Rearrange)DataTable dt = new DataTable(); dt.Column ... 
- Excel转化成DataTable实现:NPOI和OLEDb
		使用两种方式实现的excel数据转化成DataSet,再结合前一篇的DataTable转化为实体,就可以解决excel到实体之间的转化. 代码如下: 首先定义一个接口: public interfac ... 
- DataRow 数组转化成DataTable
		#region 封装DataTable DataTable dt = null; if (newRows.Length > 0) { dt = newRows[0].Table.Clone(); ... 
- 过滤DataTable中的空数据
		DataTable dt = new DataTable(tableName); for (int i = 0; i < columnsNames.Length; i++) { dt.Colum ... 
- 判断DataTable是否为空
		DataTable: ) { //为空的操作 } DataRow: if(!DataRow.IsNull("列名")) { //不为空的操作 } 
- 解决DataTable中的DataColumn类型默认为int类型时, 导致不能修改其列值为其他类型的解决办法
		问题起因: 扔给数据库一条select * from [表名] , 得到一个DataTable, 发现有一列status状态的DataColumn的类型是int,然后我想换成字典表里的文字描述,然后就 ... 
- DataTable转list时 可空类型的转换问题
		public class UtilHelper { public static IList<T> ConvertTo<T>(DataTable table) { if (tab ... 
- datatable to  entiy list 不支持可空类型和枚举类型
		还没有找到解决方法,暂存,希望有知道能告诉我.谢谢. 
随机推荐
- [Java]  java中方法可以重载
			一个类中可以定义不止一个构造器,在使用new创建对象时,Java会根据构造器提供的参数来决定构建哪一个构造器,另外在Java中,Java会同时根据方法名和参数列表来决定所要调用的方法,这叫做方法重载( ... 
- Python 描述符(descriptor) 杂记
			转自:https://blog.tonyseek.com/post/notes-about-python-descriptor/ Python 引入的“描述符”(descriptor)语法特性真的很黄 ... 
- Need help with design ReadOnlyListBase (Insert, Update, Delete from ReadOnlyListBase)
			原文地址:http://forums.lhotka.net/forums/p/3166/21214.aspx My task is: For select client, I have a modal ... 
- Hibernate注解:一对多外键关联
			情形:两个表,cms_mode是主表,cms_model_field是子表,cms_model_field的model_id字段关联到cms_model的主键. # # Source for tabl ... 
- UI_RD协作开发流程
			1. 背景 由于android端需要进行多屏幕适配,这就给UI&RD之间的沟通产生了一些困难.我下面将会对这两种角色的沟通,说明了一下我们项目中沟通的方式和规则. 原则:客户端跟UI约定了各种 ... 
- XML文件操作类--创建XML文件
			这个类是在微软XML操作类库上进行的封装,只是为了更加简单使用,包括XML类创建节点的示例. using System; using System.Collections; using System. ... 
- IOS开发-jqeurey mobile
			有一阵子没写东西了,最近打算重新拾起开发,做点手机上的东东,选中了phonegap.jquery mobile,phonegap的部署网上非常多,有空了再班门弄斧,这里先记下jquery mobile ... 
- [转] iOS开发之使用lipo命令制作模拟器与真机通用静态库
			转自 http://blog.csdn.net/jinglijun/article/details/8276089 通常在项目中使用静态库的时候都会有两个版本,一个用于模拟器,一个用于真机,因为Mac ... 
- win8 C 盘 突然少了 十几G 空间 原因,解决方法
			原因: win8 默认最大虚拟内存为 16G多,但现在电脑本身内存就大,所以应该不用了.我现在电脑本身内存是16G. 如果C盘空间大,这个无所谓了,如果C盘空间小可以按以下操作,拿回16G空间: 解决 ... 
- OSChina中远程GIT仓库同步探索
			GIT平台在OSChina中的搭建帮了我们很大的忙,但如何将本地GIT仓库上传至OSChina的远程仓库,相信这是一个艰难的坎,今天我就在此总结我的成功经验,帮助大家,共同学习.由于条件有限,我全部的 ... 
