DataTable与DataSet之间的转换Class
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
namespace Convert.Common
{
public static class DataTableConvert
{
/// <summary>
/// The DataTable type data into a List of <T> entities set t;将DataTable类型的数据转换成List<T>集合 T实体
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="dataTable"></param>
/// <returns></returns>
public static List<T> DataTableToList<T>(DataTable dataTable)
{
var list = new List<T>();
var targetType = typeof (T);
var allPropertyArray = targetType.GetProperties();
foreach (DataRow rowElement in dataTable.Rows)
{
var element = Activator.CreateInstance<T>();
foreach (DataColumn columnElement in dataTable.Columns)
{
foreach (var property in allPropertyArray)
{
if (property.Name.ToUpper().Equals(columnElement.ColumnName.ToUpper()))
{
if (rowElement[columnElement.ColumnName] == DBNull.Value ||
rowElement[columnElement.ColumnName] == "")
{
property.SetValue(element, null, null);
}
else
{
if (property.PropertyType == typeof (string))
{
property.SetValue(element, rowElement
[columnElement.ColumnName].ToString(), null);
}
else
{
//typeof(Nullable<decimal>)== typeof(decimal?)
if (property.PropertyType == typeof (decimal?) ||
property.PropertyType == typeof (decimal))
{
property.SetValue(element, decimal.Parse(rowElement
[columnElement.ColumnName].ToString()), null);
}
else if (property.PropertyType == typeof (short?) ||
property.PropertyType == typeof (short))
{
property.SetValue(element, short.Parse(rowElement
[columnElement.ColumnName].ToString()), null);
}
else if (property.PropertyType == typeof (int?) ||
property.PropertyType == typeof (int))
{
property.SetValue(element, int.Parse(rowElement
[columnElement.ColumnName].ToString()), null);
}
else if (property.PropertyType == typeof (DataAction?) ||
property.PropertyType == typeof (DataAction))
{
DataAction? da = null;
foreach (var name in Enum.GetNames(typeof (DataAction)))
{
if (
!string.IsNullOrEmpty(
rowElement[columnElement.ColumnName].ToString()))
{
if (name == rowElement[columnElement.ColumnName].ToString())
{
da =
(DataAction)
Enum.Parse(typeof (DataAction),
rowElement[columnElement.ColumnName]
.ToString(), true);
}
}
}
property.SetValue(element, da, null);
}
}
}
break;
}
}
}
list.Add(element);
}
return list;
}
public static DataSet ListToDataSet<T>(List<T> modelList)
{
if (modelList == null || modelList.Count == 0)
{
return null;
}
var ds = new DataSet();
ds.Tables.Add(ListToDataTable(modelList));
return ds;
}
public static DataTable ListToDataTable<T>(List<T> modelList)
{
if (modelList == null || modelList.Count == 0)
{
return null;
}
var dt = CreateData(modelList[0]);
foreach (var model in modelList)
{
var dataRow = dt.NewRow();
foreach (var propertyInfo in typeof (T).GetProperties())
{
dataRow[propertyInfo.Name] = propertyInfo.GetValue(model, null);
}
dt.Rows.Add(dataRow);
}
return dt;
}
/// <summary>
/// create DataTable by using model
/// </summary>
/// <param name="model">Class entity</param>
/// <returns></returns>
private static DataTable CreateData<T>(T model)
{
var dataTable = new DataTable(typeof (T).Name);
foreach (var propertyInfo in typeof (T).GetProperties())
{
try
{
dataTable.Columns.Add(new DataColumn(propertyInfo.Name.ToUpper(), propertyInfo.PropertyType));
}
catch (Exception)
{
dataTable.Columns.Add(new DataColumn(propertyInfo.Name.ToUpper(), typeof (string)));
}
}
return dataTable;
}
/// <summary>
/// change position of column in data table
/// </summary>
/// <param name="dt"></param>
/// <param name="columnsName"></param>
public static void ChangeDataTableColumnPosition(DataTable dt, string columnsName)
{
var columnNameArry =
columnsName.Trim(' ')
.Trim(' ')
.ToLower()
.Split(new[] {","}, StringSplitOptions.RemoveEmptyEntries)
.ToList();
var tbcol = new List<string>();
var delcol = new List<string>();
var addcol = new List<string>();
if (dt != null && dt.Rows.Count > 0 && columnNameArry.Count > 0)
{
foreach (DataColumn cl in dt.Columns)
{
if (!columnNameArry.Contains(cl.ColumnName.ToLower()))
{
delcol.Add(cl.ColumnName.ToLower());
}
else
{
tbcol.Add(cl.ColumnName.ToLower());
}
}
foreach (var clname in columnNameArry)
{
if (!tbcol.Contains(clname))
{
dt.Columns.Add(clname, typeof (string));
}
}
foreach (var dclname in delcol)
{
dt.Columns.Remove(dclname);
}
for (var i = 0; i < columnNameArry.Count; i++)
{
dt.Columns[columnNameArry[i]].SetOrdinal(i);
}
}
}
/// <summary>
/// change position of column in data table
/// </summary>
/// <param name="dt"></param>
/// <param name="columnsName"></param>
public static DataTable CreateDataTableColumnsName(string columnsName)
{
var dt = new DataTable();
var columnNameArry =
columnsName.Trim(' ')
.Trim(' ')
.ToLower()
.Split(new[] {","}, StringSplitOptions.RemoveEmptyEntries)
.ToList();
foreach (var clname in columnNameArry)
{
dt.Columns.Add(clname, typeof (string));
}
return dt;
}
}
}
DataTable与DataSet之间的转换Class的更多相关文章
- C# 中List<T>与DataSet之间的转换
p{ text-align:center; } blockquote > p > span{ text-align:center; font-size: 18px; color: #ff0 ...
- 【C#常用方法】2.DataTable(或DataSet)与Excel文件之间的导出与导入(使用NPOI)
DataTable与Excel之间的互导 1.项目添加NPOI的引用 NPOI项目简介: NPOI是一个开源的C#读写Excel.WORD等微软OLE2组件文档的项目,特点是可以在没有安装Office ...
- .Net中List<T> 泛型转成DataTable、DataSet
在开发过程过程中有时候需要将List<T>泛型转换成DataTable.DataSet,可以利用反射机制将DataTable的字段与自定义类型的公开属性互相赋值. 1.List<T& ...
- DataTable与实体类互相转换
/// <summary> /// DataTable与实体类互相转换 /// </summary> /// <typeparam name="T"& ...
- DataTable与DataSet
转自:http://www.cnblogs.com/rjf1979/archive/2010/09/09/1822667.html DataSet包含很多个DataTable 一张表的时候用DataT ...
- Asp.net 将DataTable 或者DataSet 转换为Json 格式
Web 开发中,将从数据库中取到的数据直接转换为 Json 格式的数据,在前台通过Ajax 无刷新显示在界面上,下面提供将DataTable 或者DataSet 转换为Json 的方法 /// < ...
- DataTable和DataSet有什么区别
DataTable和DataSet有什么区别 DataSet:数据集.一般包含多个DataTable,用的时候,dataset["表名"]得到DataTable DataTab ...
- 【转】DataTable与实体类互相转换
原文地址:https://www.cnblogs.com/marblemm/p/7084797.html /// <summary> /// DataTable与实体类互相转换 /// & ...
- C# DataTable、DataSet、List、相互转换
DataTable转LIst /// <summary> /// 利用反射将DataTable转换为List<T>对象 /// </summary> /// & ...
随机推荐
- ShareSVN授权的代码示例
var targetUrl = "your svn url path"; var path = "Temp"; System.Collections.Objec ...
- SQLServer 对已有数据表添加自增主键
最近在做老表的数据整理,发现有的表没有主键标识,.NET Core 无法一键生成模型,需要带有主键的表才可以,所以需要针对已有数据添加主键,这是我找到的两种方式. 1. 主键为int 或者bigint ...
- MAC之间共享屏幕
A 机设置-->共享-->屏幕共享 ☑️勾选上,打开屏幕共享. B 机 safari 里输入 vnc://ip 回车就可以共享屏幕了 转载请注明出处:https://www.cnb ...
- StringRedisTemplate常用API
转载自网络: //向redis里存入数据和设置缓存时间stringRedisTemplate.opsForValue().set("test", "100",6 ...
- 省市区三级联选select2.js
<div class="mui-input-row row_then" id='showCityPicker3'> <input id='cityResult3' ...
- [C#]统计文本文件txt中的行数(快速读取)
快速统计文本文件中的行数( StreamReader.ReadLine() ): 测试代码如下: //读取txt文件中总行数的方法 public static int requestMethod(St ...
- Spring 中StopWatch用法
背景 有时我们在做开发的时候需要记录每个任务执行时间,或者记录一段代码执行时间,最简单的方法就是打印当前时间与执行完时间的差值,然后这样如果执行大量测试的话就很麻烦,并且不直观,如果想对执行的时间做进 ...
- hdoj5754
题意:略 国王和骑士用记忆搜索,注意骑士的移动是x-2,y-1或x-1,y-2.车是NIM博弈,后是威佐夫博弈.注意威佐夫博弈中两堆石子有大小之分,而输入不一定小在前. #include <io ...
- python:assert
assert 断言 使用assert断言是个好习惯 在没完善一个程序之前,我们不知道程序在哪里会出错,与其让它在运行最崩溃,不如在出现错误条件时就崩溃,这时候就需要assert断言的帮助. asser ...
- python自动化测试入门篇-postman
接口测试基础-postman 常用的接口有两种:webservice接口和http api接口. Webservice接口是走soap协议通过http传输,请求报文和返回报文都是xml格式. http ...