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转换成对象列表的更多相关文章

  1. C# DataTable转换成实体列表 与 实体列表转换成DataTable

    /// <summary> /// DataTable转换成实体列表 /// </summary> /// <typeparam name="T"&g ...

  2. 将数据库返回的ResultSett转换成List装Map形式的方法(ResultSetToList)

    多时候想做一些关于数据库实验,如果先搭建框架太麻烦,直接得到ResultSet处理起来取值什么的也很繁琐,为此我做了一个将ResultSet转换成List<Map<String,Objec ...

  3. DataTable 转换成 Json的3种方法

    在web开发中,我们可能会有这样的需求,为了便于前台的JS的处理,我们需要将查询出的数据源格式比如:List<T>.DataTable转换为Json格式.特别在使用Extjs框架的时候,A ...

  4. 将DataTable转换成CSV文件

    DataTable用于在.net项目中,用于缓存数据,DataTable表示内存中数据的一个表.CSV文件最早用在简单的数据库里,由于其格式简单,并具备很强的开放性,所以起初被扫图家用作自己图集的标记 ...

  5. C#将DataTable转换成list的方法

    本文实例讲述了C#将DataTable转换成list及数据分页的方法.分享给大家供大家参考.具体如下: /// <summary>   /// 酒店评论列表-分页  /// </su ...

  6. 将list<对象>转换成DataTable,把DataTable转换成参数传入存储过程实现批量插入数据

    领导让在存储过程中批量添加数据,找出效率最高的,我看到后台代码后,发现可以将list<对象>转换成DataTable,把DataTable转换成参数传入存储过程实现批量插入数据,知道还有其 ...

  7. C# 将DataTable转换成list (--分页--) 【Skip--Take】

    将DataTable转换成list 及数据分页: /// <summary> /// 酒店评论列表-分页 /// </summary> /// <param name=& ...

  8. C# 中 DataTable转换成IList

    在用C#作开发的时候经常要把DataTable转换成IList:操作DataTable比较麻烦,把DataTable转换成IList,以对象实体作为IList的元素,操作起来就非常方便. 注意:实体的 ...

  9. DataTable转换成IList

    //文章出处: http://www.cnblogs.com/hlxs/archive/2011/05/09/2087976.html DataTable转换成IList 在用C#作开发的时候经常要把 ...

随机推荐

  1. Java 中 String 的字面量与 intern 方法

    下方代码主要说明: String b = new String("xyz")  创建2个对象,一个在常量池中的 "xyz",一个 String 实例对象,返回的 ...

  2. Jmeter应用-接口测试

    1.BS架构应用性能 2.HTTP协议接口功能与性能 3.FTP协议接口功能与性能 4.Mysql数据库性能 5.MongoDB数据库性能 6.支持自定义Java组件开发 测试计划-右键-添加线程组 ...

  3. Source Insight4

    创建工程: File->open                        打开创建的工程 同步文件: 方便跟踪 Project->Synchronize   Files 打开小窗口 ...

  4. 关于Mysql6.0+的时区错乱问题

    如果使用mysql6.0+的JDBC驱动版本的时候,有时候会出现程序时间与数据库时间相差很多个小时; 1.如果以北京时间为例,相差8个小时的情况一般是你在连接jdbc的url中没有标明system_t ...

  5. 操作系统与cpu

  6. 召回率(Recall),精确率(Precision),平均正确率

    https://blog.csdn.net/yanhx1204/article/details/81017134 摘要 在训练YOLO v2的过程中,系统会显示出一些评价训练效果的值,如Recall, ...

  7. 一键启动frida server的cmd脚本

    和以前写过的在pc直接操作的手机端的sqlite的脚本类似,需要用到重定向的命令 frida-server_helper.bat su /data/local/tmp/frida-server fri ...

  8. sizeof操作符的一些例子

    例一: #include <iostream> using namespace std; class A { public: char c; }; class B { public: in ...

  9. 前端 CSS 目录

    前端 CSS 介绍 前端 CSS语法 前端 CSS 注释

  10. [LeetCode] 55. Jump Game_ Medium tag: Dynamic Programming

    Given an array of non-negative integers, you are initially positioned at the first index of the arra ...