一: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之间的互转的更多相关文章

  1. SQL,LINQ,Lambda语法对照图(转载)

    如果你熟悉SQL语句,当使用LINQ时,会有似曾相识的感觉.但又略有不同.下面是SQL和LINQ,Lambda语法对照图 SQL LINQ Lambda SELECT * FROM HumanReso ...

  2. 【转】EntityFramework动态组合Lambda表达式作为数据筛选条件,代替拼接SQL语句

    传统的操作数据库方式,筛选数据需要用StringBuilder拼接一大堆的WHERE子句. 在Entity Framework中,代码稍有不慎就会造成巨大性能消耗,如: using(var db=ne ...

  3. [NHibernate]利用LINQPad查看NHibernate生成SQL语句

    上篇文章中我们提到可以通过重写NHibernate的 EmptyInterceptor 拦截器来监控NHibernate发送给数据库的SQL脚本,今天看到有朋友用LINQPad工具来进行NHibern ...

  4. SQL,Linq,Lambda之间的转换练习

    1.查询Student表中的所有记录的Sname.Ssex和Class列. SQL:select sname,ssex,class from Students linq:from s in Stude ...

  5. sql linq lambda 对比

    . 查询Student表中的所有记录的Sname.Ssex和Class列. select sname,ssex,class from student Linq: from s in Students ...

  6. Java8函数式接口/Lambda表达式/接口默认方法/接口静态方法/接口冲突方法重写/lambda表达式指定泛型类型等

    一:函数式接口 1.函数式接口的概念就是此接口必须有且只能有一个抽象方法,可以通过@FunctionalInterface来显示规定(类似@Override),但是没有此注解的但是只有一个抽象方法的接 ...

  7. sql,lambda,linq语句

    实例 Code 查询Student表的所有记录. select * from student Linq: from s in Students select s Lambda: Students.Se ...

  8. Lambda表达式的无参数无返回值的练习和Lambda表达式有参数有返回值的练习

    使用Lambda(无参无返回) 说明:给定一个厨师(Cook)接口,内含唯一的抽象方法makeFood,且无参数.无返回值.如下: public interface Cook{ public abst ...

  9. [2014-12-30]如何动态构造Lambda表达式(动态构造Lambda查询条件表达式)

    声明 本文对Lambda表达式的扩展,示例代码来源于网络. 场景描述 web开发查询功能的时候,如果查询条件比较多,就会遇到动态组合查询条件的情况.在手写sql的情况下,我们一般会根据传入的参数,针对 ...

随机推荐

  1. linux 监控系统剩余内存大小

    cur_free = `free -m | awk '/buffers\// {print $NF}'` chars="current memory is $cur_free." ...

  2. Django-2的路由层(URLconf)

    URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于客户端发来的某个URL调用哪一段逻辑代码 ...

  3. Python网络编程与并发编程

    网络编程基础 黏包 , 并发 计算机网络的发展及基础网络概念 Python 中的进程与 锁 Python IO 多路复用 \协程

  4. tree的所有节点都勾选上或者取消勾选

    还有一个功能,就是让tree的所有节点都勾选上或者取消勾选,在api中找了一下有一个方法: check target 选中指定节点. 那我们只能是选中根节点后,实现全选. getRoot none 获 ...

  5. 【312】◀▶ arcpy 常用函数说明

    其他常用的 ArcPy 函数说明 序号 类名称   功能说明   语法 & 举例 01 RefreshActiveView   ====<<<< Description ...

  6. .net core 2.0的一次奇特经历

    环境:.net core SDK版本 2.0.0-preview1-005977 VS 2017 version 15.3.0 preview 3.0 问题描述:今天在迁移Job的项目中,中午吃饭的时 ...

  7. Logging模块总结 2018/5/30

    日志的级别 Level 用处 数字级别 DEBUG 详细的信息,在调试过程中用于诊断错误 10 INFO 用于确认事件正在运行 20 WARNING 意外发生时予以提醒,或者预测一些未来可能发生的一些 ...

  8. mysql-5.6.24-win32解决没有my.ini并且修改编码

    3.配置环境变量:新建一个系统变量: MYSQL_HOME, 值:D:\MySql\mysql5611  //这一步不做也行 4.修改MySql启动配置文件: 将安装目录下文件:my-default. ...

  9. book pile SGU - 271

    有n本书从上到下摞在一起,有两种操作.ADD(C)表示把一本新书C放到这一摞书的最顶上,ROTATE表示将前K本书进行反转.在一系列操作后输出最后书的顺序 分析: 当时听别人讲这个题的时候很懵逼,后来 ...

  10. MYSQL 测试常用语句使用技巧

     终于有时间可以整理一下工作中常用的sql语句,基本的sql语句及增删改查就不说了.对于测试而言,经常用到的还是造数据,取随机数据和查询.比如造数据时,为了确保数据真实性,可能时间是随机的,用户是随机 ...