大家在使用.NET开发时把查询结果以DataTable返回很方便,但是在检索数据时又很麻烦,没有模型类型检索方便。
所以很多人都是按照以下方式做的:
// 获得查询结果
DataTable dt = DbHelper.ExecuteDataTable(...);
// 把DataTable转换为IList<UserInfo>
IList<UserInfo> users = ConvertToUserInfo(dt);
问题:如果此系统有几十上百个模型,那不是每个模型中都要写个把DataTable转换为此模型的方法吗?
解决:能不能写个通用类,可以把DataTable转换为任何模型,呵呵,这就需要利用反射和泛型了。
以下是核心代码,经过测试,性能不错,大家可以根据实际情况改善
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Reflection;
namespace Flexzoo.Data
{
/// <summary>
/// 实体转换辅助类
/// </summary>
public class ModelConvertHelper<T> where T : new()
{
public static IList<T> ConvertToModel(DataTable dt)
{
// 定义集合
IList<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;
}
}
}
使用方式:
// 获得查询结果
DataTable dt = DbHelper.ExecuteDataTable(...);
// 把DataTable转换为IList<UserInfo>
IList<UserInfo> users = ModelConvertHelper<UserInfo>.ConvertToModel(dt);
分享到:
相关推荐
本文实例讲述了C#实现DataTable转换成IList的方法。分享给大家供大家参考,具体如下: 在用C#作开发的时候经常要把DataTable转换成IList;操作DataTable比较麻烦,把DataTable转换成IList,以对象实体作为IList的...
if (row != null) { obj = Activator.CreateInstance(); foreach (DataColumn column in row.Table.Columns) { PropertyInfo prop = obj.GetType().GetProperty(column.ColumnName); ... object value = row...
最近在项目中用到泛型接口通过反射转换为DataTable,查了些资料看到的解决方法不是太对,这里有我解决后的方法,希望对大家有帮助!
本文实例讲述了C#实现DataTable,List和Json转换的方法。分享给大家供大家参考,具体如下: 1. 将DataTable或Ilist<>转换成JSON格式 using System; using System.Data; using System.Text; using System....
代码如下:/// /// 将List转换成DataTable /// /// ”T”> /// ”data”> /// <returns></returns> public static DataTable ToDataTable(this IList<T> data) { PropertyDescriptorCollection prope
List转成json public static string ListToJson(IList<T> list, string jsonName) { StringBuilder Json = new StringBuilder(); if (string.IsNullOrEmpty(jsonName)) jsonName = list[0].GetType().Name; ...
public static DataTable ToTable(IList<T> entities); public static DataTable ToTable(params T[] entities); public static DataTable ToTable(bool isAdapted, params T[] entities); public static ...
public static DataTable ToTable(IList<T> entities); public static DataTable ToTable(params T[] entities); public static DataTable ToTable(bool isAdapted, params T[] entities); public static ...
考虑到和服务端交互数据的性能问题,在项目升级的同时,想把DataTable替换掉。 GridControl绑定IList比较简单,但是在调试主从表效果时,一直没能达到预期效果,子列表的列名一直显示相应类的字段名称。这个问题令...
public static DataTable ToTable(IList<T> entities); public static DataTable ToTable(params T[] entities); public static DataTable ToTable(bool isAdapted, params T[] entities); public static ...
一个简单的datagridview绑定datatable数据,添加合计行,后可排序.
从DataTable到T.// DataTable数组:从IListpublic静态DataTable ToDataTable(this IList iList){DataTable dataTable = new DataTable(); PropertyDescriptorCollection propertyDescriptorCollection = ...
dataset,datatable,dataview , IList 4.概述反射和序列化 反射:程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集、模块和类型的对象。您可以使用反射动态地创建类型的实例,将类型绑定到...
下面介绍三种对comboBox绑定的方式,分别是泛型中IList和Dictionary,还有数据集DataTable 一、IList 现在我们直接创建一个List集合,然后绑定 IList<string> list = new List(); list.Add(111111); list.Add...
l 报表的数据源可以使用所有的.Net数据类型,如DataSet, DataTable, ArrayList,自定义实体类等,方便和您的程序进行集成。 l 集成图片,条码等报表常用控件。 l 强大的脚本功能。脚本支持C#/VB.Net语言。有编译...
解决了报表定制问题,只要绑定一个DataTable或者一个IList对象就能直接显示报表,省略建立报表文件定制报表等步骤。本实例包括生成列,表格,表头等。。。,支持导出成EXCEL,因为是VS2005自带的报表组建,生成报表...
ITransactionKeeper同时也实现了IDisposable接口,其Dispose方法能够在事务没有提交时进行事务回滚(如果已经提交,则什么也不做),利用这个机制和C#的using语法,可以很方便的编写一个在出现异常时回滚的事务操作...
dataset,datatable,dataview , IList 4.概述反射和序列化 反射:程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集、模块和类型的对象。您可以使用反射动态地创建类型的实例,将类型绑定到...