您的位置:首页 > 编程语言 > C#

C# DataRow的扩展

2016-06-07 18:37 351 查看
/// <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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: