大家在使用.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...
### IList转换为DataTable 的实现方法 在.NET框架中,`IList<T>`与`DataTable`是两种非常常见的数据结构。前者是一种泛型接口,主要用于处理类型安全的列表;而后者则是.NET Framework中用于存储数据的一种表格形式...
本文将详细讨论如何使用C#将DataTable、List以及相关的数据结构转换为JSON格式,以便在网络传输或者存储中使用。 首先,让我们看如何将一个DataTable转换为JSON。在.NET框架中,虽然没有内置的直接方法来实现这个...
代码如下:/// /// 将List转换成DataTable /// /// ”T”> /// ”data”> /// <returns></returns> public static DataTable ToDataTable(this IList<T> data) { PropertyDescriptorCollection prope
本文将深入探讨如何使用C#将DataSet、string、DataTable以及对象转换成JSON字符串。 首先,让我们理解JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它易于人阅读和编写,同时也易于机器解析和...
本话题主要关注如何将`DataTable`的数据绑定到`DataGridView`,并在此基础上添加合计行,以及实现排序功能。 首先,让我们详细解释`DataGridView`和`DataTable`的基本概念。`DataGridView`是Windows Forms中的一种...
首先,我们来看标题中提到的`ListToJson<T>`方法,这是一个泛型方法,用于将IList类型的列表转换为JSON字符串。该方法接受两个参数,一个是列表对象,另一个是可选的jsonName参数,用于指定JSON对象的键名。如果...
首先,我们需要创建一个数据源,这可以是任何实现了`IList`或`IBindingList`接口的对象,如DataTable、BindingList、ArrayList等。例如,我们可以创建一个DataTable并填充数据,然后将其绑定到DataGridView: ```...
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 ...
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 ...
- C#提供了多种集合类,如ArrayList、LinkedList、HashSet等,以及泛型接口如IEnumerable和IList。源码中可能会有如何使用这些集合处理数据的例子。 5. **文件和流操作** - 文件读写:C#提供了System.IO命名空间...
在C#编程中,利用委托和反射可以实现从`DataTable`到自定义实体集的转换。这种方法允许我们将数据表中的数据动态地映射到具有相同属性名称的实体对象中。下面详细解释这个过程: 首先,我们需要一个泛型约束来确保...
在C#编程中,DataSet是一种常用的用来存储和操作关系型数据的数据结构,它包含了多个DataTable。而当我们处理数据库查询结果时,通常会将这些数据转化为更具体的对象集合,也就是实体集合类,以便进行业务逻辑处理。...
7. `DataTable.Rows`和`DataColumn`属性的使用,以便访问数据行和列的信息。 这种将数据库查询结果转换为泛型集合的方法使得代码更加面向对象,易于操作和扩展,同时减少了类型转换的繁琐步骤,提高了代码的可维护...
3. **DataGrid的数据源**:DataGrid控件可以连接各种数据源,包括DataTable、DataView、DataSet、DataViewManager,以及实现IListSource和IList接口的组件。 4. **反射和序列化**:反射允许程序在运行时动态地获取...