zoukankan      html  css  js  c++  java
  • 构造复杂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
    }

  • 相关阅读:
    Cookie的定义和分类,及优缺点
    网页开发和设计
    电视精灵(新手练习项目)
    C#体检套餐项目
    C#简单的对象交互
    那些年我们学过的构造函数(构造方法,C#)
    员工打卡课后小项目
    SpringMVC类型转换器
    SpringMVC 异常处理3种方案
    SSH整合(一)hibernate+spring
  • 原文地址:https://www.cnblogs.com/dragon-L/p/6528567.html
Copyright © 2011-2022 走看看