一: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. postgresql 相关

    http://www.yiibai.com/html/postgresql/2013/080998.html 1.安装PG的client以及函数库: yum install postgresql    ...

  2. ResultMap详解

    MyBatis:ResultMap详解   一.前言   MyBatis是基于“数据库结构不可控”的思想建立的,也就是我们希望数据库遵循第三范式或BCNF,但实际事与愿违,那么结果集映射就是MyBat ...

  3. npm安装elasticsearch-reindex

    由于新版的nodejs已经集成了npm,所以之前npm也一并安装好了.同样可以通过输入 "npm -v" 来测试是否成功安装. npm -v 你可以使用以下命令来查看所有全局安装的 ...

  4. 前端开发之JavaScript HTML DOM理论篇二

    主要内容: 1.HTML DOM元素 2.HTML DOM事件 一.DOM元素 主要操作有添加.删除和替换HTML元素 1.创建新的HTML元素  (1)方法一: appendChild() 追加 如 ...

  5. Linux实战教学笔记19:Linux相关网络知识梳理

    第十九节 Linux相关网络知识梳理 标签(空格分隔): Linux实战教学笔记-陈思齐 一,前言 一个运维有时也要和网络打交道,所以具备最基本的网络知识,对一个运维人员来说是必要的.但,对于我们的工 ...

  6. java 蓝桥杯算法提高 _3K好数

    nums[i][j] 存的是i位数的时候,首位数字是j的K好数的数目,i从1位开始的结果,去算2位时的结果,去算3位时的结果...最后得到l位的结果.K进制只是一个范围. import java.ut ...

  7. NodeJS - npm WARN package.json : No repository field:can not open package.json

    最近在研究node.js,在安装npm的时候发现了几个报错,瞬间蒙圈,查找文献基本解决(文献好少呀~  -.-)   一.报错:“can not open  path/path/package.jso ...

  8. spring4-2-bean配置-6-使用外部属性文件

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAk0AAAFGCAIAAAD4tzxRAAAgAElEQVR4nO2d27HsOm+tOxWn4CeXAm ...

  9. zookeeper会话超时 链接超时的排查

    1.会话概述 在ZooKeeper中,客户端和服务端建立连接后,会话随之建立,生成一个全局唯一的会话ID(Session ID).服务器和客户端之间维持的是一个长连接,在SESSION_TIMEOUT ...

  10. Python代码规范利器Flake8

    写代码其实是需要规范的,团队中更是如此:不然 Google 也不会发布各种编码规范,耳熟能详的有Google C++ 风格指南,Google Python 风格指南,等等. 这些规范有用吗?有用也没用 ...