/// <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;
}
C# DataRow的扩展
时间: 2024-12-29 06:14:55
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的定义: 扩展方法被定义为静态方法,但它们是通过实例方法语法进行调用的.