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;
}
/// 对于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;
}
相关文章推荐
- 委托的初步理解和用法
- 委托的初步理解和用法
- C# 操作pem 文件
- C# 特性
- C# 发送电子邮件
- 文本编辑器设计
- C#中的静态类
- C# - 数据备份-datatable数据写入到CSV文件中
- C#接口
- C#解决Linq OrderBy() 失效的小技巧
- C# 获取本机的串口号
- 啊哈哈哈哈 C#按日期生成文件夹,并在文件夹中写入文件
- C#学习笔记一
- C#double转化成字符串 保留小数位数, 不以科学计数法的形式出现。
- C# Winform中的DataGridView中行定位-滚动条定位
- C#中yield用法
- C# new用法总结
- 浅析C#静态类,静态构造函数,静态变量
- C#索引器
- C#中读取xml文件和生成xml文件