一: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. Network Real Trace Analysis 2015年12月10日

    了解网络中真实的流量,国内很难找到巨人的肩膀. WAND是新西兰waikato 大学计算机系的研究小组,主要做网络测量,大规模网络流量捕获,网络分析.还做专业的分析软件. libtrace是其开源的分 ...

  2. GridhEH 选择勾CheckBox

    GridhEH 选择勾CheckBox Grideh>IndicatorOptions>gioShowRowSelCheckbox

  3. FireDAC 接占线导致另一个 hstmt DataSnap

    [FireDAC][Phys][ODBC][Microsoft][ODBC SQL Server Driver]连接占线导致另一个 hstmt 同样的程序,在2台win10 正常,1台win10 报连 ...

  4. Python 多进程使用

    进程通信 方式一.共享内存(进程安全,效率高) 共享变量:multiprocessing.Value 共享数组:multiprocessing.Array   方式二.Manager对象:list, ...

  5. postgresql 相关

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

  6. 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 10—Advice for applying machine learning 机器学习应用建议

    Lecture 10—Advice for applying machine learning 10.1 如何调试一个机器学习算法? 有多种方案: 1.获得更多训练数据:2.尝试更少特征:3.尝试更多 ...

  7. DVI与VGA有什么区别

    [DVI与VGA有什么区别] DVI接口的传输信号采用全数字格式,与之对应的是采用模拟信号的VGA接口. VGA和DVI的区别,首先VGA模拟信号的传输比较麻烦,首先是将电脑内的数字信号转换为模拟信号 ...

  8. css的优先级和权重问题 以及!important优先级

    一,前言: 刚加的css怎么没有渲染出来?浏览器中查看,发现是被其他的css给覆盖了,相信我们都曾遇到过这样的问题.那么浏览器是如何选择css标签的渲染顺序的呢?换句话说,css选择器的优先级是怎么规 ...

  9. NSArray & NSDictionary

    一.NSArray 1.1 简单创建方法由难到简 NSArray *arr = [[NSArray alloc] init]; NSArray *arr = [NSArray arrayWithObj ...

  10. 341. Flatten Nested List Iterator展开多层数组

    [抄题]: Given a nested list of integers, implement an iterator to flatten it. Each element is either a ...