构造复杂Lambda困惑之学会用LinqPad和Linqer实现Sql 和 Lambda之间的互转
一:linq的话我们可能会遇到两个问题:
1. 我们的linq出现性能低下的时候,如果优化????
我们写的linq所生成的sql是无法控制的。。。 (要做性能优化,必须预先知道sql会生成啥样的???)
sql profile 查看生成的sql。。。
这个时候,我们必须有一个工具知道linq转成的sql会是啥样的???
linq =》 sql
《1》 LinqPad
先linq转换成sql,,,这样的话就方便我们做优化了。。。
在分页的时候,我们的sql会变成相当复杂。。。
官方下载地址: https://www.linqpad.net/Download.aspx
Teachers.GroupJoin(Courses, (Teacher t) => t.TeacherId,
(Course c) => c.TearcherId,
(t, list) => new
{
t.TeacherName,
list
}).Skip(1).Take(2)
-- Region Parameters
DECLARE @p0 Int = 1
DECLARE @p1 Int = 2
-- EndRegion
SELECT [t1].[TeacherName], [t2].[CourseId], [t2].[CourseName], [t2].[Location], [t2].[TearcherId], (
SELECT COUNT(*)
FROM (
SELECT NULL AS [EMPTY]
FROM [Course] AS [t3]
WHERE ([t1].[TeacherId]) = [t3].[TearcherId]
) AS [t4]
) AS [value]
FROM (
SELECT ROW_NUMBER() OVER (ORDER BY [t0].[TeacherId]) AS [ROW_NUMBER], [t0].[TeacherName], [t0].[TeacherId]
FROM [Teacher] AS [t0]
) AS [t1]
LEFT OUTER JOIN [Course] AS [t2] ON ([t1].[TeacherId]) = [t2].[TearcherId]
WHERE [t1].[ROW_NUMBER] BETWEEN @p0 + 1 AND @p0 + @p1
ORDER BY [t1].[ROW_NUMBER], [t2].[CourseId]
用到了 ROW_NUMBER() 函数。。。。
这样的话,我们就可以做性能优化。。。。【评估执行计划】
这个时候,如果sql非常慢,我们可以通过“加索引”的方式加速查询性能。。。
2. 有时候业务非常复杂,linq需要嵌套加嵌套,crm,erp,oa。。。【报表统计】
linq复杂的情况下,我们不知道如何构造。。。。这就尴尬了。。。
这个时候我们知道sql的写法。。。
sql =》 linq
Linqer 工具。。。。
官方下载地址: http://www.sqltolinq.com/downloads
sql:
select * from Teacher as t
join Course as c
on t.TeacherID=c.TearcherId
where t.TeacherId>2 and UPPER(t.TeacherName)='葛老师' and c.CourseName like '%历%'
order by c.Location
linq:
from c in db.Course
where
c.Teacher.TeacherId > 2 &&
c.Teacher.TeacherName.ToUpper() == "葛老师" &&
c.CourseName.Contains("历")
orderby
c.Location
select new {
CourseId = c.CourseId,
CourseName = c.CourseName,
Location = c.Location,
TearcherId = c.TearcherId,
TeacherId = c.Teacher.TeacherId,
TeacherName = c.Teacher.TeacherName,
TeacherType = c.Teacher.TeacherType
}
构造复杂Lambda困惑之学会用LinqPad和Linqer实现Sql 和 Lambda之间的互转的更多相关文章
- SQL,LINQ,Lambda语法对照图(转载)
如果你熟悉SQL语句,当使用LINQ时,会有似曾相识的感觉.但又略有不同.下面是SQL和LINQ,Lambda语法对照图 SQL LINQ Lambda SELECT * FROM HumanReso ...
- 【转】EntityFramework动态组合Lambda表达式作为数据筛选条件,代替拼接SQL语句
传统的操作数据库方式,筛选数据需要用StringBuilder拼接一大堆的WHERE子句. 在Entity Framework中,代码稍有不慎就会造成巨大性能消耗,如: using(var db=ne ...
- [NHibernate]利用LINQPad查看NHibernate生成SQL语句
上篇文章中我们提到可以通过重写NHibernate的 EmptyInterceptor 拦截器来监控NHibernate发送给数据库的SQL脚本,今天看到有朋友用LINQPad工具来进行NHibern ...
- SQL,Linq,Lambda之间的转换练习
1.查询Student表中的所有记录的Sname.Ssex和Class列. SQL:select sname,ssex,class from Students linq:from s in Stude ...
- sql linq lambda 对比
. 查询Student表中的所有记录的Sname.Ssex和Class列. select sname,ssex,class from student Linq: from s in Students ...
- Java8函数式接口/Lambda表达式/接口默认方法/接口静态方法/接口冲突方法重写/lambda表达式指定泛型类型等
一:函数式接口 1.函数式接口的概念就是此接口必须有且只能有一个抽象方法,可以通过@FunctionalInterface来显示规定(类似@Override),但是没有此注解的但是只有一个抽象方法的接 ...
- sql,lambda,linq语句
实例 Code 查询Student表的所有记录. select * from student Linq: from s in Students select s Lambda: Students.Se ...
- Lambda表达式的无参数无返回值的练习和Lambda表达式有参数有返回值的练习
使用Lambda(无参无返回) 说明:给定一个厨师(Cook)接口,内含唯一的抽象方法makeFood,且无参数.无返回值.如下: public interface Cook{ public abst ...
- [2014-12-30]如何动态构造Lambda表达式(动态构造Lambda查询条件表达式)
声明 本文对Lambda表达式的扩展,示例代码来源于网络. 场景描述 web开发查询功能的时候,如果查询条件比较多,就会遇到动态组合查询条件的情况.在手写sql的情况下,我们一般会根据传入的参数,针对 ...
随机推荐
- springMVC json自动将date类型转换为long
今天早上遇到了一个奇怪得问题,直接给后台发送请求返回得页面信息中显示时间是正常得,如:2016-03-17 15:42:11.0,但是通过AJAX获取得信息中显示得时间竟然是时间戳. 我首先检查后台传 ...
- 2019 最新 阿里天猫、蚂蚁、钉钉ava 面试题汇总,附答案
Java面试前需要做足各方面的准备工作,肯定都会浏览大量的面试题,本人也不例外,这是一些最新面试题,分享给大家. Java基础 面向对象的特征:继承.封装和多态 int 和 Integer 有什么区别 ...
- MonkeyScript测试命令集合
MonkeyScript:(不支持截屏) 可以被Monkey识别的集合命令 可以完成重复固定的操作 MonkeyRunner(支持截屏操作) 提供一系列API,可以完成模拟事件和截屏操作 Mo ...
- PEM文件和private.key文件生成IIS服务器所需的pfx文件(配置SSL用)
第一步:输入域名,点击"创建免费的SSL证书"按钮,如图 第二步:输入邮箱,点击创建,如图 创建成功后,需要进行dns验证,结果图如下: 第三步:在域名所在的云服务器上,添加域名解 ...
- libaco: 一个极速的轻量级 C 非对称协程库 🚀 (10 ns/ctxsw + 一千万协程并发仅耗内存 2.8GB + Github Trending)
0 Name 简介 libaco - 一个极速的.轻量级.C语言非对称协程库. 这个项目的代号是Arkenstone
- dbf 命令 及数据类型
left()函数只能截取左边几位字符,截取中间字符用SUBSTR() SUBSTR(cExpression, nStartPosition [, nCharactersReturned]) dbf u ...
- Spring 学习记录8 初识XmlWebApplicationContext(2)
主题 接上文Spring 学习记录7 初识XmlWebApplicationContext refresh方法 refresh方法是定义在父类AbstractApplicationContext中的. ...
- UISprite
[UISprite] UISprite用于引用一个UIAtlas中的sprite. 此脚本最强大的功能是Sprite Type,主要指定在需拉伸图片时的行为,它有以下几种值: 1)Simple:普通拉 ...
- Quartz_2_简单编程式任务调度使用(CronTrigger)
第二个要介绍的任务调度器中的触发器是 CronTrigger ,相比较 SimpleTrigger 来说,CronTrigger 相对灵活,对于复杂的业务需求来说,更加的实用.要在使用 CronTri ...
- 这几天用高通VUFORIA的体会
VUFORIA 主要用来做图像识别,先把图片上至网站,然后网站分析生成数据包 在UNITY中导入VUFORIA SDK和数据包后,就可以正常使用了 对了,数据包需要勾选Load Active那个选项, ...