使用特性将数据库返回的datatable转换成对象列表
public class ColumnMapAttribute : Attribute
{
private readonly string _name;
public ColumnMapAttribute(string name)
{
_name = name;
}
public string Name { get { return _name; } }
} public class DbModelBase
{
public DbModelBase()
{
} public DbModelBase(DataRow row)
{
foreach (var tuple in GetType().GetProperties().Select(p =>
{
object[] objs = p.GetCustomAttributes(typeof(ColumnMapAttribute), false);
return new Tuple<PropertyInfo, string>(p, objs.Length > 0 ? ((ColumnMapAttribute)objs[0]).Name : null);
}).Where(t => t.Item2 != null))
{
object value = row[tuple.Item2];
if (value != DBNull.Value)
{
Type type = tuple.Item1.PropertyType;
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>))
{
//DateTime? -> DateTime
type = type.GetGenericArguments()[0];
}
object changedValue = Convert.ChangeType(value, type);
tuple.Item1.SetValue(this, changedValue, null);
}
}
}
}
public class PersonClass: DbModelBase
{
public PersonClass(DataRow row) : base(row) { } [ColumnMap("person_id")]
public int PersonId { get; set; } [ColumnMap("name")]
public string PersonName { get; set; } }
//上面实现了一个自定义特性类,用于记录数据库字段名
//使用 DbModelBase类做字段和属性之间的映射
//使用时, 只需要继承DbModelBase 在属性上写上对应的字段名称
var resultModel = table.Rows.Cast<DataRow>().Select(row => new PersonClass(row));
//使用上面这句话获取的数据使用起来很耗时(原因不明)
//加上.ToList();就变快了
var resultModel = table.Rows.Cast<DataRow>().Select(row => new PersonClass(row)).ToList();
使用特性将数据库返回的datatable转换成对象列表的更多相关文章
- C# DataTable转换成实体列表 与 实体列表转换成DataTable
/// <summary> /// DataTable转换成实体列表 /// </summary> /// <typeparam name="T"&g ...
- 将数据库返回的ResultSett转换成List装Map形式的方法(ResultSetToList)
多时候想做一些关于数据库实验,如果先搭建框架太麻烦,直接得到ResultSet处理起来取值什么的也很繁琐,为此我做了一个将ResultSet转换成List<Map<String,Objec ...
- DataTable 转换成 Json的3种方法
在web开发中,我们可能会有这样的需求,为了便于前台的JS的处理,我们需要将查询出的数据源格式比如:List<T>.DataTable转换为Json格式.特别在使用Extjs框架的时候,A ...
- 将DataTable转换成CSV文件
DataTable用于在.net项目中,用于缓存数据,DataTable表示内存中数据的一个表.CSV文件最早用在简单的数据库里,由于其格式简单,并具备很强的开放性,所以起初被扫图家用作自己图集的标记 ...
- C#将DataTable转换成list的方法
本文实例讲述了C#将DataTable转换成list及数据分页的方法.分享给大家供大家参考.具体如下: /// <summary> /// 酒店评论列表-分页 /// </su ...
- 将list<对象>转换成DataTable,把DataTable转换成参数传入存储过程实现批量插入数据
领导让在存储过程中批量添加数据,找出效率最高的,我看到后台代码后,发现可以将list<对象>转换成DataTable,把DataTable转换成参数传入存储过程实现批量插入数据,知道还有其 ...
- C# 将DataTable转换成list (--分页--) 【Skip--Take】
将DataTable转换成list 及数据分页: /// <summary> /// 酒店评论列表-分页 /// </summary> /// <param name=& ...
- C# 中 DataTable转换成IList
在用C#作开发的时候经常要把DataTable转换成IList:操作DataTable比较麻烦,把DataTable转换成IList,以对象实体作为IList的元素,操作起来就非常方便. 注意:实体的 ...
- DataTable转换成IList
//文章出处: http://www.cnblogs.com/hlxs/archive/2011/05/09/2087976.html DataTable转换成IList 在用C#作开发的时候经常要把 ...
随机推荐
- Docker简介以及使用docker搭建lnmp的过程(多PHP版本)
一.Docker基础 Docker安装 Docker 要求 Ubuntu 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的 Ubuntu 版本是否支持 Docker. 通过 uname ...
- 微信小程序 fixed 解决 textarea 的 placeholder 不固定问题
当我们把 textarea 放到一个 position:fixed; 中的元素中时. 会发现这个 textarea 也会跟着固定位置,但是 textarea 的 placeholder 内容不会固定, ...
- vue全选与取消全选
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Spark 实现wordcount
配置完spark之后,使用spark实现wordcount,这一部分完全参考<深入理解Spark:核心思想与源码分析> 依然使用hadoop wordcountTest的那几个txt文件 ...
- c++函数strapy
头文件:#include <string.h> 定义函数:char *strcpy(char *dest, const char *src); 函数说明:strcpy()会将参数src 字 ...
- Django创建项目基本步骤
1.新建项目 django-admin startproject cmdb(项目名) 2.启动服务python manage.py runserver 0.0.0.0:8000(表示服务监听在8000 ...
- xmind使用
按住alt可以使子主题线条拉长:
- C++/C代码审查注意事项(摘录,非原创)
文件结构 头文件和定义文件的名称是否合理?头文件和定义文件的目录结构是否合理?版权和版本声明是否完整? 重要头文件是否使用了 ifndef/define/endif 预处理块?头文件中是否只存放“声明 ...
- python基础1 print()函数
一切程序的开始都是由print('hello world') 了解print()函数 输出python之歌 print(''' 优美胜于丑陋明了胜于晦涩简洁胜于复杂复杂胜于凌乱扁平胜于嵌套间隔胜于紧凑 ...
- wx.createSelectorQuery() 获取节点信息 获取不到解决方法
场景:一个气泡的宽度由加载来的数据填充所决定,不定宽, wx.createSelectorQuery().selectAll('.talkbubble').boundingClientRect ...