EF中自编写SQL脚本查询结果(适用于复杂SQL逻辑提高查询效率)

前不久项目开发过程中,使用的是Entity Framework做数据处理。因为本人也不是对EF太有研究,只是会用而已,但是在一次需要查询的结果需要关联3、4个表来查询出来结果,并且对查询效率也有要求。但是个人觉得遇到这样的情况还是使用原始SQL语句来查询更为可控(或许EF中有更好的方法可以解决此类问题,但恕本人愚笨只想到了这种方法)。就又自己扩展出一个方法,用来专门查询自定义编写的SQL语句。代码如下:

 public List<T> ExecuteStoreQuery(string commandText, params object[] parameters)
        {
            using (var db = GetEntity())
            {
                var objectList = db.ExecuteStoreQuery<T>(commandText, parameters).ToList();
                return objectList;
            }
        }

上段代码中db.ExecuteStoreQuery<T>()方法是EF中已经定义的方法,可见就是为这种情况预留的。

具体调用方法如下:

  public List<ClassInfo> GetClassInfoList()
        {
            const string sql = @"你的SQL";
            //这边可以根据你SQL的需要,判断是否进行参数化查询
            return this.ExecuteStoreQuery(sql);
        }    

使用这种方法,你可以不必再使用EF模板自动帮你生成的Model,可以自定义Model,但查询的Sql结果中的字段必须在给定的类型中存在。

如果读者有什么更好的解决方案,欢迎沟通交流,共同进步~

END

注:如有转载或引用请注明出处 http://www.cnblogs.com/sev7en/p/4021994.html

时间: 2024-08-11 18:54:28

EF中自编写SQL脚本查询结果(适用于复杂SQL逻辑提高查询效率)的相关文章

编写bat脚本执行msyql建库sql

使用cmd命令执行(windows下) [MySQL的bin目录]\mysql –u用户名 –p密码 –D数据库<[sql脚本文件路径全名],示例: D:\mysql\bin\mysql –uroot –p123456 -Dtest<d:\test\ss.sql 注意: A.如果在sql脚本文件中使用了use 数据库,则-D数据库选项可以忽略 B.如果[Mysql的bin目录]中包含空格,则需要使用""包含,如:"C:\Program Files\mysql\bi

Linux—编写shell脚本操作数据库执行sql

修改数据库数据 ??在升级应用时,我们常常会遇到升级数据库的问题,这就涉及到sql脚本的编写. ??一般我们会通过写sql脚本,然后将xxx.sql脚本放到数据库中进行source xxx.sql执行.本篇文章,我们可以通过写shell脚本来执行数据库操作. 配置文件 创建 test_sql.properties 作为shell脚本的外部配置参数修改: [[email protected] sql_sh]$ vim test_sql.properties # set parameters sta

解决sql脚本文件太大无法打开的问题

as we known,sql数据库高版本向低版本还原是不太可能但是又经常会碰到的事,今天实测了一种方法 步骤:任务->生成脚本-> 下一步->高级,选择数据库版本和编写脚本数据类型为架构和数据,可以保留数据. 继续下一步完成. 最终得到一个巨大的sql脚本文件 ->接下来首先要在低版本数据库中新建一个目标数据库,然后运行sql脚本文件即可 一般的sql文件我们都是直接在SqlServer的查询窗口直接执行的,但是这个巨大的sql文件实在是太大了,SqlServer甚至是记事本都无

SQLServer用powershell实现多台服务器批量执行SQL脚本

在运维工作中,会遇到很多重复性的操作.对于单台服务器重复性的工作,可以用job实现定期的处理:而对于多台服务器相同的需求,我们就可以利用powershell来进行批量的操作,对多台服务器进行批量相同的操作.本文重点分析这种方案的实现过程,而不纠结于对每台服务器具体执行的SQL脚本,所以在例子中以简单的SQL脚本为例:在中心服务器上执行一个powershell脚本,即可以收集所有服务器的信息.对类似于定期出report的任务,还可以将该powershell脚本设置成计划任务. 首先将需要执行批量操

让你提前认识软件开发(35):如何修改SQL脚本以完成需求?

第2部分 数据库SQL语言 如何修改SQL脚本以完成需求? SQL脚本的修改和C语言代码的修改流程是一样的,都要遵循以下步骤:         第一步,阅读需求,弄清楚自己要完成什么功能.         第二步,对照需求阅读原代码,找到本次要修改的内容的大致位置.         第三步,对代码进行修改(包括:添加.删除和修改等),将本次的功能添加上去.         第四步,对修改后的代码进行测试,验证新增功能是否满足需求. 本文以一个实际的需求完成过程为例,详细说明如何对SQL脚本进行修

利用SQL索引提高查询速度

1.合理使用索引 索引是数据库中重要的数据结构,它的根本目的就是为了提高查询效率.现在大多数的数据库产品都采用IBM最先提出的ISAM索引结构. 索引的使用要恰到好处,其使用原则如下: 在经常进行连接,但是没有指定为外键的列上建立索引,而不经常连接的字段则由优化器自动生成索引. 在频繁进行排序或分组(即进行group by或order by操作)的列上建立索引. 在条件表达式中经常用到的不同值较多的列上建立检索,在不同值少的列上不要建立索引.比如在雇员表的“性别”列上只有“男”与“女”两个不同值

[原]Sql脚本压缩类。

精简的美丽 /* * Sql脚本压缩类. * 去掉sql语句中多余的空格,以减少sql脚本的文本长度 * * Author : [email protected] * DateTime : 2015/07/03 */ using System.Text.RegularExpressions; namespace Sp.Net.Tools { internal class SqlCompressor { public static string Compress(string source) {

Spring Boot使用——项目启动自动执行sql脚本

背景 在项目上线前,需要提供一批测试数据到数据库,数据需求是:每次修改缺陷重启项目后,测试数据会初始化成最初的数据 核心思想 在SpringBoot的架构中,DataSourceInitializer类可以在项目启动后初始化数据,我们可以通过自动执行自定义sql脚本初始化数据.通过自定义DataSourceInitializer Bean就可以实现按照业务要求执行特定的脚本. 使用 前提:项目数据源配置完成 方法 通过@Configuration.@Bean和@Value三个注解实现自定义Dat

SQL脚本IN在EF中的应用

C#查询条件中存在in,为了避免拼脚本,参数化查询数据库,提高安全性,规避脚本注入.网上找了好多,最后发现 SqlParameter 是无法实现in的操作,所以只能变相来实现,结果还是不错的,性能上各位自己去测试一下吧,因为in操作本身就比较慢(无法使用索引).下面给出SQl脚本 --传统in操作 SELECT a.NAME FROM ( SELECT '张源' AS NAME UNION ALL SELECT '赵明' AS NAME UNION ALL SELECT '王刚' AS NAME