不要轻易使用linq代替sql
使用Entityframework+Reposity模式 写出的代码执行效率极低。
Linq代码:
var querySql = rel_project_personservice.GetItems(r => r.Person).Where(w => w.ProjectId == projectId && w.Person.College.University.Province == provinceName);
转化的SQL语句:
SELECT "Extent1"."personid", "Extent1"."projectid", "Extent1"."isallotroom", "Extent1"."randomcode", "Extent1"."admissionticket",
"Extent1"."pushstatus", "Extent1"."createdtime", "Extent1"."examinationroomid", "Extent2"."id", "Extent2"."name", "Extent2"."idnumber",
"Extent2"."gender", "Extent2"."mobile", "Extent2"."idcard", "Extent2"."email", "Extent2"."degree", "Extent2"."nation", "Extent2"."major",
"Extent2"."graduatedate", "Extent2"."livingcity", "Extent2"."accountlocation", "Extent2"."expectcity", "Extent2"."enterprisenature",
"Extent2"."expectindustry", "Extent2"."expectjob", "Extent2"."collegeid", "Extent2"."status", "Extent2"."signuptype",
"Extent2"."createdtime" AS "createdtime1", "Extent2"."modifiedtime", "Extent2"."createdby", "Extent2"."modifiedby",
"Extent2"."classname", "Extent2"."idcardtype", "Extent2"."birthday", "Extent2"."xzid", "Extent2"."szid", "Extent2"."testcity",
"Extent2"."graduateschool", "Extent2"."degreeid", "Extent2"."nationid", "Extent2"."majorid", "Extent2"."accountlocationid",
"Extent2"."livingcityid", "Extent2"."expectcityid", "Extent2"."enterprisenatureid", "Extent2"."expectindustryid",
"Extent2"."expectjobid", "Extent2"."testcityid" FROM "public"."rel_project_person" AS "Extent1" INNER JOIN "public"."person" AS "Extent2"
ON "Extent1"."personid" = "Extent2"."id" LEFT OUTER JOIN "public"."college" AS "Extent3" ON "Extent2"."collegeid" = "Extent3"."id"
LEFT OUTER JOIN "public"."university" AS "Extent4" ON "Extent3"."universityid" = "Extent4"."id"
WHERE "Extent1"."projectid" = 11 AND ("Extent4"."province" = '北京' OR "Extent4"."province" IS NULL )
linq转出来的语句在数据库上执行,花费40多秒:
Total query runtime: 40.1 secs
检索到 行。
实现同样的业务,自己写的sql语句:
Select C.UNIVERSITYID,c.name,count(p.id)
from Person p
join Rel_Project_Person R on P.id =R.PersonID
join College C on p.CollegeID = C.id
where R.ProjectId = and C.universityid IN
(
Select id from University where Province = '北京'
)
group by C.UNIVERSITYID,c.name
执行自己写的sql,花费不到1秒:
Total query runtime: msec
检索到 行。
不要轻易使用linq代替sql的更多相关文章
- (转)QueryBuilder : 打造优雅的Linq To SQL动态查询
原文地址:http://www.cnblogs.com/coolcode/archive/2009/09/28/IQueryBuilder.html 首先我们来看看日常比较典型的一种查询Form 这个 ...
- LINQ to SQL语句(7)之Exists/In/Any/All/Contains
适用场景:用于判断集合中元素,进一步缩小范围. Any 说明:用于判断集合中是否有元素满足某一条件:不延迟.(若条件为空,则集合只要不为空就返回True,否则为False).有2种形式,分别为简单形式 ...
- 年终巨献 史上最全 ——LINQ to SQL语句
LINQ to SQL语句(1)之Where 适用场景:实现过滤,查询等功能. 说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的子句.Where操 ...
- LINQ to SQL语句(20)之存储过程
在我们编写程序中,往往需要一些存储过程,在LINQ to SQL中怎么使用呢?也许比原来的更简单些.下面我们以NORTHWND.MDF数据库中自带的几个存储过程来理解一下. 1.标量返回 在数据库中, ...
- LINQ to SQL语句(19)之ADO.NET与LINQ to SQL
它基于由 ADO.NET 提供程序模型提供的服务.因此,我们可以将 LINQ to SQL 代码与现有的 ADO.Net 应用程序混合在一起,将当前 ADO.NET 解决方案迁移到 LINQ to S ...
- LINQ to SQL语句(18)之运算符转换
运算符转换 1.AsEnumerable:将类型转换为泛型 IEnumerable 使用 AsEnumerable<TSource> 可返回类型化为泛型 IEnumerable 的参数.在 ...
- LINQ to SQL语句(17)之对象加载
对象加载 延迟加载 在查询某对象时,实际上你只查询该对象.不会同时自动获取这个对象.这就是延迟加载. 例如,您可能需要查看客户数据和订单数据.你最初不一定需要检索与每个客户有关的所有订单数据.其优点是 ...
- LINQ to SQL语句(14)之Null语义和DateTime
Null语义 说明:下面第一个例子说明查询ReportsToEmployee为null的雇员.第二个例子使用Nullable<T>.HasValue查询雇员,其结果与第一个例子相同.在第三 ...
- LINQ to SQL语句(10)之Insert
1.简单形式 说明:new一个对象,使用InsertOnSubmit方法将其加入到对应的集合中,使用SubmitChanges()提交到数据库. var newCustomer = new Custo ...
随机推荐
- chkconfig系统服务启动设置
chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息. 谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接. 使用语法:chkconfig [--a ...
- 【转】MyEclipse 2015优化技巧
MyEclipse 2015优化技巧 MyEclipse 2015优化速度方案仍然主要有这么几个方面:去除无需加载的模块.取消冗余的配置.去除不必要的检查.关闭更新. 第一步: 去除不需要加载的模块 ...
- Spring4学习笔记 - SpEL表达式
- Harp – 内置常用预处理器的静态 Web 服务器
Harp 是一个基于 Node.js 平台的静态 Web 服务器,内置流行的预处理器,支持把 Jade, Markdown, EJS, Less, Stylus, Sass, and CoffeeSc ...
- Font Combiner – 自定义网页字体和图标生成工具
Font Combiner 是一个功能丰富的 Web 字体生成工具和字体改进工具,提供字距调整.构造子集.各种提示选项和自定义字体字形组合.您可以生成您自己的自定义字体的格式和文件大小. 另外还有成千 ...
- js基本算法:冒泡排序,二分查找
知识扩充: 时间复杂度:算法的时间复杂度是一个函数,描述了算法的运行时间.时间复杂度越低,效率越高. 自我理解:一个算法,运行了几次时间复杂度就为多少,如运行了n次,则时间复杂度为O(n). 1.冒泡 ...
- SharePoint 2010 人员选择器搜索范围的限定
客户AD中用户信息过多,而当前的SharePoint应用中不需要针对所有AD进行筛选,则需要通过STSADM来设置搜索范围: stsadm -o setsiteuseraccountdirectory ...
- Java实现---堆排序 Heap Sort
堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法.学习堆排序前,先讲解下什么是数据结构中的二叉堆. 堆的定义 n个元素的序列{k1,k2,…,kn}当且仅当满足下列关 ...
- ASP和ASP.NET发送邮件笔记
这两天因公司网站邮件发不出去,然后研究了在asp网站发送邮件和在asp.net网站发送邮件的代码,把碰到的问题这里记录一下. 1.先说在asp.net中发送邮件吧, 刚开始只有126邮箱可以发出邮件, ...
- 【代码笔记】iOS-调用系统震动和声音
代码: RootViewController.m #import "RootViewController.h" #import <AudioToolbox/AudioTool ...