微软的EF至今已到了EF6版本了,但是,不知道微软咋想的,至今也不支持直接从数据库获取一张数据表DataTable,但这个DataTable在许多情况下还是比确定的实体化类更方便好使,这里,我仿照微软的书写习惯,扩展了一个这样的方法,同时,由于EF内部的原因,每一个声明出的System.Data.Common.DbParameter型对象都无法重复使用,为了方便,同时为System.Data.SqlClient.SqlParameter[]型的对象扩展了一个克隆的方法,不多说了,直接上代码吧

public static class Extension
{
/// <summary>
/// 获取DataSet的方法
/// </summary>
/// <param name="db"></param>
/// <param name="commandType"></param>
/// <param name="commandText"></param>
/// <param name="objs"></param>
/// <returns></returns>
public static DataSet GetDataSet(this System.Data.Entity.Database db, System.Data.CommandType commandType, string commandText, params System.Data.Common.DbParameter[] parameterValues)
{
System.Data.Common.DbConnection con = db.Connection;//DbConnection是SqlConnection的父类(抽象型类),其余ADO对象与此情况类同 using (System.Data.Common.DbCommand cmd = con.CreateCommand())//DbCommand是个抽象类,C#为了让接口能正常运行,就设置了这样一个方法来生成接口对象,也算是无奈情况下的一个特例吧,毕竟不能new,却还必须得用
{
cmd.CommandText = commandText;
cmd.CommandType = commandType;
cmd.Parameters.AddRange(parameterValues); DataSet ds = new DataSet();
using (var sda = System.Data.Common.DbProviderFactories.GetFactory(con).CreateDataAdapter())
{
sda.SelectCommand = cmd;
sda.Fill(ds);
} return ds;
} } /// <summary>
/// 克隆出一个新的参数数组,新被克隆者仅仅是参数名和参数值相同而又,其本质是一个新的对象,这是因为为EF扩展的GetDataSet()中的参数无法重复使用才又扩展出这样一个方法来方便使用
/// </summary>
/// <param name="paras"></param>
public static List<System.Data.SqlClient.SqlParameter> Clone(this List<System.Data.SqlClient.SqlParameter> paras)
{
var pms = new List<System.Data.SqlClient.SqlParameter>();
foreach (var x in paras)
{
pms.Add(new System.Data.SqlClient.SqlParameter(x.ParameterName, x.Value));
}
return pms;
} }

用法如下:

using (Models.db_zhikong db = new Models.db_zhikong())
{
var sql = "select * from ft_user where username=@username and staff_name like @staff_name";
var ds = db.Database.GetDataSet(CommandType.Text, sql, new System.Data.Common.DbParameter[]
{
new System.Data.SqlClient.SqlParameter("@username","houfb"),  //注:System.Data.Common.DbParameter是System.Data.SqlClient.SqlParameter的抽象父类
new System.Data.SqlClient.SqlParameter("@staff_name","%飞彪%"),
});
var row_count = ds.Tables[].Rows.Count;
}

EF获取DataTable的扩展方法GetDataSet的更多相关文章

  1. (原创)[C#] DataTable排序扩展方法

    一,前言 DataTable的应用极其广泛,对DataTable进行排序也有很多方式,每种的实现方式都不难,但是使用起来却比较繁琐,所以本人便写了一个扩展方法,专门对DataTable进行操作. 本篇 ...

  2. 在使用EF时调用DBFUNCTION扩展方法时,发生ENTITYCOMMANDEXECUTIONEXCEPTION 异常的解决办法

    System.Data.Entity.Core.EntityCommandExecutionException : An error occurred while executing the comm ...

  3. WebAPi添加常用扩展方法及思维发散

    前言 在WebAPi中我们通常需要得到请求信息中的查询字符串或者请求头中数据再或者是Cookie中的数据,如果需要大量获取,此时我们应该想到封装一个扩展类来添加扩展方法,从而实现简便快捷的获取. We ...

  4. 译:泛型List集合转化为DateTable的扩展方法

    译文出处:http://www.codeproject.com/Tips/867866/Extension-Method-for-Generic-List-Collection-to-Da 这段代码是 ...

  5. EF大数据批量处理 EntityFrameWork下增加扩展方法

    为EF操作方法添加扩展方法 BulkInsert 大致设计方式为 通过当前DbContext 获取当前连接字符串,调用连接字符串获取当前实体的所有字段及字段属性,映射到DataTable中 在调用Sy ...

  6. DataTable扩展方法ToList<T>()、ToJSON()、ToArrayList()

    /// <summary> /// 扩展方法类 /// </summary> public static class CommonExtension { /// <sum ...

  7. C#中DataTable与实体集合通用转换(使用扩展方法)

    本案例提供了:把DataRow转换为单个实体.dataTable转换为List泛型支持时间格式转换. 下文的方法都是扩展方法.扩展方法要求写在静态类中,方法也要静态. 它必须在一个非嵌套.非泛型的静态 ...

  8. c# ef 排序字段动态,构建动态Lambda和扩展方法OrderBy

    1.动态构建排序 Lambda /// <summary> /// 获取排序Lambda(如果动态排序,类型不同会导致转换失败) /// </summary> /// < ...

  9. C# DataTable扩展方法

    在日常搬砖中,总结了一些简单的扩展方法. public static bool IsNullOrEmpty(this DataTable dt) { ; } public static bool Is ...

随机推荐

  1. nu.xom:Element

    Element: 机翻 Element(Element element) :通过深复制,创建一个element Element(String name) :创建一个没有命名空间的element Ele ...

  2. JavaScript剩余操作符Rest Operator

    本文适合JavaScript初学者阅读 剩余操作符 之前这篇文章JavaScript展开操作符(Spread operator)介绍讲解过展开操作符.剩余操作符和展开操作符的表示方式一样,都是三个点 ...

  3. HDU - 1232 畅通工程【并查集】

    畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  4. 洛谷P3877 [TJOI2010]打扫房间 解题报告

    首先整理一下条件: 1.恰好进出每个需打扫的房间各一次 2.进出每个房间不能通过同一个门 (其实前两个条件是一回事) 3.要求每条路线都是一个闭合的环线 4.每条路线经过的房间数大于2 让你在一个n* ...

  5. 使用jqueryUI实现自由调整表格列宽

    今天项目中需要插入表格,用Excel表格调整列宽时,想怎么拖就怎么拖,于是乎就让插入的表格也这么让人舒服.网上查找许久,没找到好用的方案.最后发现jQuery UI中的resizable()方法可以实 ...

  6. 编写Django项目并使用uwsgi和nginx部署在Linux平台

    内容转载自:我自己的博客地址 这是花费了一个月的时间摸索整理出来的一份总结.分享出来一方面是给新人一个借鉴,另一方面对自己也算是个备份. --- *** 整个Django项目: ├── example ...

  7. IP地址/掩码/网关/DNS的设置与工作原理(转)

    现在互联网飞速发展,工作中生活中上不了网的计算机是不可想象的,而电脑系统网络设置中的IP地址.子网掩码.默认网关及DNS服务器,怎么理解,它们是如何工作的,下面做个简单介绍. 通常的上网方式,是打开I ...

  8. C#编程之JSON序列化与反序列化

    1.在C#管理NuGet程序包中添加Json.NET 2.C#将对象序列化成JSON字符串 模型类1 /// <summary> /// JSON字符串模型.是否出错 /// </s ...

  9. mac 下搭建安装 sass

    一.安装系统需要的包 安装Xcode开发工具,它将帮你安装好 Unix 环境需要的开发包 打开 App Store,搜索 Xcode,第一个就是,对了,有4个多G,网速如果不大好,就请先厕所哭会儿吧, ...

  10. DH、RSA与ElGamal非对称加密算法实现及应用

    1.对称加密与非对称加密概述 关于对称加密与非对称加密的概念这里不再多说,感兴趣可以看下我之前的几篇文章,下面说一说两者的主要区别. 对称加密算法数据安全,密钥管理复杂,密钥传递过程复杂,存在密钥泄露 ...