将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 不支持可空类型和枚举类型
还没有找到解决方法,暂存,希望有知道能告诉我.谢谢.
随机推荐
- Redis使用详细教程(转)
一.Redis基础部分: 1.redis介绍与安装比mysql快10倍以上 *****************redis适用场合**************** 1.取最新N个数据的操作 2.排行榜应 ...
- 日期选择控件-laydate
laydate控件非常简单易用,只需要调用一个个函数就可以轻松实现日期时间选择. <%@ page language="java" import="java.uti ...
- div的contenteditable和placeholder蹦出的火花
今天在做手机端发布描述内容时,需要实现换行,还需要有plachholder. 在文本框中换行自然想到了textarea. 问题似乎已经解决了,但是当内容发布后,在html中显示换行都丢失了. 这个时候 ...
- SQLite打开提示database disk image is malformed
SQLite打开提示database disk image is malformed 网上说产生这种错误的原因有很多种,磁盘空间不足,还有就是写入数据过程中突然掉电等. 这种情况,如果数据还可以导出, ...
- java的重载
1.java的重载三种:参数类型不同,构成重载,参数类型不同:::::参数顺序不同构成重载::::::参数个数不同,构成重载
- 通过srvctl add命令添加database信息到srvctl管理器-转
这是我在实际中遇到的一个问题,rac+dg架构将备库切为主库,srvctl管理器中没有database信息. 对于dbca创建的数据库,srvctl中包含了数据库和实例的信息.但是对于备份恢复的RAC ...
- OpenStack Nova 制作 Windows 镜像
OpenStack Nova 制作 Windows 镜像 windows虚拟机ubuntuimage防火墙云计算 本贴转自http://www.vpsee.com 上次 VPSee 给 OpenS ...
- Begin using git (Part1) - Git的安装与配置
Git提供了适用于Linux, Windows, OSX的客户端, 本节以Windows为例介绍基本安装与配置. 所需工具:msysgit, kdiff3. Get windows installer ...
- university, school, college, department, institute的区别
这些个词没有太大区别,有时候有些词是可以通用的,而有些用法则是随着地域时间的不同而变迁. 一般说来,college译作“学院”,它是university (综合性大学)的一个组成部分,例如,一所综合大 ...
- HTTP权威指南----缓存
缓存的处理步骤: 1.接收----缓存从网络中读取抵达的请求报文2.解析----缓存对报文进行解析,提取出URL和各种首部3.查询----缓存查看是否有本地副本可用,如果没有,就获取一份副本(并将其保 ...