datatable转换泛型list帮助类

残风飞雪 残风飞雪     2023-02-13     678

关键词:

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Reflection;

namespace JNPF.Common.Security

/// <summary>
/// 实体转换辅助类
/// </summary>
public class ModelConvertHelper<T> where T : new()

/// <summary>
/// List泛型转换DataTable.
/// </summary>
public DataTable ListToDataTable<T>(List<T> items)

var tb = new DataTable(typeof(T).Name);

PropertyInfo[] props = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);

foreach (PropertyInfo prop in props)

Type t = GetCoreType(prop.PropertyType);
tb.Columns.Add(prop.Name, t);

foreach (T item in items)

var values = new object[props.Length];

for (int i = 0; i < props.Length; i++)

values[i] = props[i].GetValue(item, null);

tb.Rows.Add(values);

return tb;

/// <summary>
/// model转换DataTable
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="items"></param>
/// <returns></returns>
public DataTable ModelToDataTable<T>(T items)

var tb = new DataTable(typeof(T).Name);

PropertyInfo[] props = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);

foreach (PropertyInfo prop in props)

Type t = GetCoreType(prop.PropertyType);
tb.Columns.Add(prop.Name, t);


var values = new object[props.Length];

for (int i = 0; i < props.Length; i++)

values[i] = props[i].GetValue(items, null);

tb.Rows.Add(values);


return tb;

/// <summary>
/// Determine of specified type is nullable
/// </summary>
public static bool IsNullable(Type t)

return !t.IsValueType || (t.IsGenericType && t.GetGenericTypeDefinition() == typeof(Nullable<>));

/// <summary>
/// Return underlying type if type is Nullable otherwise return the type
/// </summary>
public static Type GetCoreType(Type t)

if (t != null && IsNullable(t))

if (!t.IsValueType)

return t;

else

return Nullable.GetUnderlyingType(t);


else

return t;

/// <summary>
/// DataTable转换泛型List
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public static List<T> DataTableToList(DataTable dt)

// 定义集合
List<T> ts = new List<T>();

// 获得此模型的类型
Type type = typeof(T);
string tempName = "";
foreach (DataRow dr in dt.Rows)

T t = new T();
// 获得此模型的公共属性
PropertyInfo[] propertys = t.GetType().GetProperties();
foreach (PropertyInfo pi in propertys)

tempName = pi.Name; // 检查DataTable是否包含此列

if (dt.Columns.Contains(tempName))

// 判断此属性是否有Setter
if (!pi.CanWrite) continue;

object value = dr[tempName];
if (value != DBNull.Value)
pi.SetValue(t, value, null);


ts.Add(t);

return ts;

/// <summary>
/// DataTable转Model
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public static T DataTableToModel(DataTable dt)

// 定义实体
T t = new T();

// 获得此模型的类型
Type type = typeof(T);
string tempName = "";

foreach (DataRow dr in dt.Rows)

// 获得此模型的公共属性
PropertyInfo[] propertys = t.GetType().GetProperties();
foreach (PropertyInfo pi in propertys)

tempName = pi.Name; // 检查DataTable是否包含此列

if (dt.Columns.Contains(tempName))

// 判断此属性是否有Setter
if (!pi.CanWrite) continue;

object value = dr[tempName];
if (value != DBNull.Value)
pi.SetValue(t, value, null);


break;

return t;


list,泛型和datatable的相互转换

publicstaticDataTableToDataTableTow(IListlist){DataTableresult=newDataTable();if(list.Count>0){PropertyInfo[]propertys=list[0].GetType().GetProperties();foreach(PropertyInfopiinpropertys){result.Co 查看详情

泛型与datatable转化

...进行处理,从中筛选数据或者排序。技能栈:泛型+反射转换帮助类代码:usingSystem;usingSystem.Collections.Generic;usingSystem.Data;usingSystem.Linq;u 查看详情

泛型list转换成datatable(代码片段)

1privateDataTablelistToDataTable<T>(List<T>ListItem)23//实列化DataTable对象4vardt=newDataTable(typeof(T).Name);56//通过反射获取List实体的属性信息7PropertyInfo[]propertyInfos=typeof(T).GetProperties(BindingFlags.Public|BindingFlags.Instance);89//给DataTable添加定义1... 查看详情

将datatable转换为list,将list转换为datatable的实现类

usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Linq;usingSystem.Reflection;usingSystem.Text;usingSystem.Threading.Tasks;namespaceXmh.DBUnit{///< 查看详情

小5聊c#通过将datatable转为list泛型遇到的问题

1、报错信息如下2、原因因为update_time属性设置了只读,不可设置值,所以转换时会报错提示   查看详情

小5聊c#通过将datatable转为list泛型遇到的问题

1、报错信息如下2、原因因为update_time属性设置了只读,不可设置值,所以转换时会报错提示   查看详情

封装一个list集合和datatable相互转换的工具类(代码片段)

///<summary>///List转换为DataTable对象///</summary>publicclassListTranTableModel///<summary>///新增的列名称///</summary>publicstringaddColumNameget;set;///<summary>///新增列的默认信息/// 查看详情

c#公共帮助类jsonhelper操作帮助类

...nHelper、JsonSplit、AjaxResult一、JsonConverter:自定义查询对象转换动态类、object动态类转换json包、json转换object动态类、DataReader转换为Json、DataSet转换为Json、DataTable转成Json、Datatable转换为Json、格式化字符型日期型布尔型、过滤特殊... 查看详情

list转换datatable

///<summary>    ///将泛类型集合List类转换成DataTable    ///</summary>    ///<paramname="list">泛类型集合</param>    ///<returns></returns>    publicSystem.Data.DataTab 查看详情

datatable转成list集合

...几天就碰到这个问题,网上搜索整理了一个万能类,用了泛型和反射的知识。共享如下: 按Ctrl+C复制代码publicclassModelConvertHelper<T>whereT:new()//此处一定要加上new(){publicstaticIList<T>ConvertToMo 查看详情

请教javalist泛型转换

...的元素,从而在后续如果进行for循环就无须进行强制类型转换,因为此时,集合能够记住元素的类型信息,编译器已经能够确认它是String类型了。参考技术AJDK1.5中引入了泛型(Generic)机制。泛型的本质是参数化类型,也就是说所... 查看详情

泛型类型上的 Linq 类型转换

】泛型类型上的Linq类型转换【英文标题】:Linqtypeconversionongenerictypes【发布时间】:2012-01-0213:05:51【问题描述】:我找到了这段代码,但即使我尝试了多次转换,它也不起作用。基本上,它巧妙地将Datatable转换为可序列化的List... 查看详情

如何将datatable转换成list<t>

...可以很清晰的看懂我的思路。首先,这是我写的一个通用转换类,完成此类操作。也是实现这个功能最核心的部分:[java]viewplaincopyusingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Data;usingSystem.Collections;usingSyst... 查看详情

c#中泛型集合怎样写强制类弄转换

有一个方法,返回List<object>,怎样赋值给一个List<自定义对象>变量?这里主要是强制类型转化不知怎样写,比例有一个变量intvar是int类型,赋值给long类型变量longvar,则这样写longvar=(long)intvar;但这泛型集合变类型怎么写?... 查看详情

datatable转换为entity(反射&&泛型)

publicstaticIEnumerable<T>Parse<T>(IEnumerable<DataRow>rows)whereT:class,new(){if(rows==null||Enumerable.FirstOrDefault<DataRow>(rows)==null)return(IEnumerable<T>)newT[0] 查看详情

linq查询结果怎么转换成datatable

...iteidorderbym.g_createtimedescendingselectm;returndt;//怎么将messagelist转换成datatable返回呢?谢谢参考技术A用泛型啊,返回你的实体类格式。如publicList<你的实体类名>Getusermessage(intsiteid,stringuserpwd)DataClassesDataContextdb=newDataClassesDataContext();... 查看详情

基于reflect将list泛型数据源转换为json字符串

...个通用类,实现将List<T>类型的数据向json格式数据的转换。代码如下:首先建立一个基于Reflect的基础类Reflect,实现对名称为给定字符串的属性的赋值或取值操作:1using 查看详情

实体类与datatable互换

///<summary>///实体类转换成DataTable///</summary>///<paramname="modelList">实体类列表</param>///<returns></returns>publicDataTableFillDataTable(List<T>modelList){if(mode 查看详情