C# DataRow的扩展

/// <summary>
    /// 对于entity的一些常用的扩展方法
    /// </summary>
    public static class MyExtension
    {
        /// <summary>
        /// 把DataRow转换成一个指定的实体类型
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="dr"></param>
        /// <returns></returns>
        public static T ToEntity<T>(this DataRow dr)
        {
            var type = typeof (T);
          
            var ins = Activator.CreateInstance<T>();
            var pis = type.GetProperties();
            foreach (PropertyInfo pi in pis)
            {
                var myProType = pi.PropertyType.Name.ToLower();
                var colName = pi.Name;
                object val = String.Empty;
                var myAttr = pi.GetCustomAttributes<PropertyTypeAttribute>().FirstOrDefault();
                if (myAttr != null)
                {
                    if (!String.IsNullOrEmpty(myAttr.MyColName))
                    {
                        colName = myAttr.MyColName;
                    }
                    if (myAttr.MyType!=null)
                    {
                        myProType = myAttr.MyType.Name.ToLower();
                    }
                }
                if (!dr.Table.Columns.Contains(colName))
                {
                    continue;
                }
                switch (myProType)
                {
                    case "string"://String
                        val = dr[colName] == DBNull.Value ? String.Empty : dr[colName].ToString();
                        break;
                    case "int32"://int
                        val = dr[colName] == DBNull.Value ? 0 : Int32.Parse(dr[colName].ToString());
                        break;
                    case "int64"://long
                        val = dr[colName] == DBNull.Value ? 0 : Int64.Parse(dr[colName].ToString());
                        break;
                    case "decimal"://Decimal
                        val = dr[colName] == DBNull.Value ? Decimal.Zero : Decimal.Parse(dr[colName].ToString());
                        break;
                    case "double"://Double
                        val = dr[colName] == DBNull.Value ? 0 : Double.Parse(dr[colName].ToString());
                        break;
                    case "boolean"://Boolean
                        val = dr[colName] != DBNull.Value && Boolean.Parse(dr[colName].ToString());
                        break;
                    case "datetime"://DateTime
                        val = dr[colName] != DBNull.Value ? DateTime.Parse("1970-01-01 00:00:00") : DateTime.Parse(dr[colName].ToString());
                        break;
                    default:
                        break;
                }
                if (pi.CanWrite)
                {
                    pi.SetValue(ins, val);
                }
            }
            return ins;
        }

时间: 2024-08-07 16:35:43

C# DataRow的扩展的相关文章

C#中DataRow加扩展方式-转为对象

public static T ConvertToModel<T>(this DataRow dr) { T t = Activator.CreateInstance<T>(); //创建实例 PropertyInfo[] pi = t.GetType().GetProperties();//取类的属性 //属性赋值 foreach (PropertyInfo p in pi) { if (dr.Table.Columns.Contains(p.Name) && !

C#中的反射和扩展方法的运用

前段时间做了一个练手的小项目,名叫Book_Bar,用来卖书的,采用的是三层架构,也就是Models,IDAL,DAL,BLL 和 Web , 在DAL层中各个类中有一个方法比较常用,那就是 RowToClass ,顾名思义,也就是将 DataTable 中的数据封装到 Models 中.结果导致在DAL各个类中写了很多类似的方法,后来就直接把它抽取出来做成了 DataTable和 DataRow的扩展方法, 下面是代码: using System; using System.Collectio

随手写的一个对DataRow和DataSqlReader的扩展方法

因为觉得一般使用DataRow获取行数据时使用字符串 会有太多的不确定和类型判断所以想自己扩展一下 最后成果 public class Model { public int objUserID { get; set; } public string FirstName { get; set; } } class Program { static void Main(string[] args) { DataRow r = null; var contact= r.GetContact<Model

c# 之DataTable的扩展方法

由于太懒了,很久没更新了.毕业了,得好好装逼学习了,不能一心想着完了. 由于公司中的项目大量的使用DataTable,而每次对datatable进行操作的时候需要写很多相同的代码,所以秉着 装逼而学习 的态度,于是撸了几个扩展方法,记录下来,学习下.     class Program     {         public DataTable LinqTable = new DataTable();         void AddNewRow(int id, string name)   

DTcms 扩展字段标签调用

前台模版:{model.fields[author]} 点击数 后台CS文件:model.fields["author"].ToString() 赋值 Dictionary<string, string> dic = new Dictionary<string, string>(); dic.Add("good", "1"); dic.Add("author", user.user_name); mod

泛型List集合转化为DateTable的扩展方法

文章出处:http://www.codeproject.com/Tips/867866/Extension-Method-for-Generic-List-Collection-to-Da 这段代码是能够帮助你把泛型集合List转出成DataTable的扩展方法. 背景: 不知道你是否知道这个扩展方法,但是你可以不做任何修改的去使用下面这个类的代码. 使用代码:   using System; using System.Collections.Generic; using System.Comp

LINQ常用扩展方法

下面的方法都是IEnumerable<T>的扩展方法: Average计算平均值: Min最小元素:Max最大元素:Sum元素总和: Count元素数量: Concat连接两个序列://Unoin all Contains序列是否包含指定元素: Distinct取得序列中的非重复元素: Except获得两个序列的差集: Intersect获得两个序列的交集: First取得序列第一个元素: Single取得序列的唯一一个元素,如果元素个数不是1个,则报错:!!!严谨的程序. FirstOrDe

EntityFramework中支持BulkInsert扩展

很显然,你应该不至于使用 EntityFramework 直接插入 10W 数据到数据库中,那可能得用上个几分钟.EntityFramework 最被人诟病的地方就是它的性能,处理大量数据时的效率.此种条件下,通常会转回使用 ADO.NET 来完成任务. 但是,如果已经在项目中使用了 EntityFramework,如果碰到需要直接向数据库中插入 10W 的数据的需求,引入 ADO.NET 和 SqlBulkCopy 的组合将打破 EntityFramework 作为 ORM 所带来的优势,我们

C# 3.0 特性之扩展方法

今天,我们来聊一聊C#的扩展方法. C# 3.0中为我们提供了一个新的特性—扩展方法.什么是扩展方法呢?我们看一下MSDN的注解: 扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型 也就是说,我们可以为基础数据类型,如:String,Int,DataRow,DataTable等添加扩展方法,也可以为自定义类添加扩展方法. 那么,我们怎么向现有类型进行扩展呢?我们再看看MSDN的定义: 扩展方法被定义为静态方法,但它们是通过实例方法语法进行调用的.