博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# DataRow的扩展
阅读量:5923 次
发布时间:2019-06-19

本文共 1771 字,大约阅读时间需要 5 分钟。

/// <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;
        }

转载于:https://www.cnblogs.com/xiaozhuaweiliang/p/5568024.html

你可能感兴趣的文章
深入剖析Java即时编译器(下)
查看>>
基于Mixin Network的Ruby比特币开发教程
查看>>
干货:如何处理前任程序员遗留下来的代码?
查看>>
LeetCode 680 Valid Palindrome II javascript解决方案
查看>>
Golang 学习笔记(04)—— array, slice, map
查看>>
带你了解TCP/IP协议族
查看>>
Typora编辑器Markdown语法简介
查看>>
JSP+SSH汽车租赁
查看>>
promise笔记之thenable 对象
查看>>
iOS11跟Xcode9的适配问题以及解决方案
查看>>
Intent四种数据传递方式
查看>>
2018年尾总结——稳中成长
查看>>
MaxCompute 图计算开发指南
查看>>
WordPress制作
查看>>
比特币耶稣Roger Ver,是一个商人,更是一个斗士
查看>>
基础邮件原理(MUA,MTA,MDA)
查看>>
随记:使用docker搭建mysql学习环境
查看>>
Linux运维面试题
查看>>
python 乘法表
查看>>
GRPC 基于Protobuf 通信协议支持HTTP2
查看>>