精华内容
下载资源
问答
  • 如何追踪LINQ To SQL 生成SQL

    千次阅读 2011-06-07 09:39:00
    通常有三种常用的方法用来追踪由LINQ To SQL提供器生成SQL命令:用DataContext.log,用DataContext.GetCommand,和用LINQ To SQL调试平台。1) 用DataContext.log这句代码可以使生成SQL显示在控制台窗口。这个...

    通常有三种常用的方法用来追踪由 LINQ To SQL 提供器生成的 SQL 命令:用 DataContext.log ,用 DataContext.GetCommand ,和用 LINQ To SQL 调试平台。

    1)       DataContext.log

    这句代码可以使生成的 SQL 显示在控制台窗口。这个 SQL 可以是查询,插入,更新和删除命令。

    =======================================================

    db.Log = Console.Out;

    =======================================================

    附加参考:

    http://msdn.microsoft.com/en-us/library/bb386961.aspx

    2)       DataContext.GetCommand

    这个方法提供了有关 LINQ To SQL 生成的 SQL 命令的相关信息,但是它仅仅是获取方法而不影响 DataContext 的状态。请注意以下事项(引自 MSDN 文档):

    ·         参数必须非空,否则会抛出一个空参数异常。

    ·         正常的 LINQ 查询转换为 SQL 查询执行抛出异常的申请不能被转换。

    ·         只有以一个查询命令返回。特别是额外的命令,这是渴望加载命令,不包括在内。

    ·         DataContext 不跟踪用户处理的命令,例如从返回的命令执行的结果不会被追踪,从而不影响 DataContext 的状态。

    下面的示例显示 SQL 命令生成的控制台窗口中的 LINQ To SQL 查询。

    ======================================================

    MyDataContextdb = new MyDataContext();

    var query = from d in db.Departments select d;

    DbCommand dc = db.GetCommand(q);

    Console.WriteLine(dc.CommandText);

    =======================================================

      附加参考:

    http://msdn.microsoft.com/en-us/library/bb882652.aspx

     

    3)       LINQ To SQL 调试平台

    LINQ To SQL 调试平台通过看见在 Visual Studio 调试平台 生成的 SQL 可以帮助我们调试 LINQ to SQL IQueryable<> 查询语句。我们也可以在平台上执行生成的 SQL 语句来检查返回值。

    要安装 LINQ  to SQL 调试平台,请按照以下步骤:

    a)       下载 LINQ to SQL Visualizer.zip 压缩包在 这儿

    b)      关闭正在与性的各种版本的 visual studio 2008

    c)       .zip 压缩包的 /bin/debug/ 路径复制 SqlServerQueryVisualizer.dll 程序集到本地路径 /Program Files/Microsoft Visual Studio9.0/Common7/Packages/Debugger/Visualizers/

    d)      再次启动 Visual Studio2008 。现在我们就可以用 LINQ to SQL 调试平台了。

    附加参考:

    http://weblogs.asp.net/scottgu/archive/2007/07/31/linq-to-sql-debug-visualizer.aspx

    http://weblogs.asp.net/bilalshouman/archive/2009/02/17/linq-to-sql-debug-visualizer.aspx

    展开全文
  • linq中没有类似sql 中的notin ,事实上很多时候都会用到,可以通过下面方式来实现notin的功能 from a in TableA where !(from b in TableB Where ... select b.Id).Contains(a.Id) 生成出来的语句并非跟not in ...

    linq中没有类似sql 中的notin  ,事实上很多时候都会用到,可以通过下面方式来实现notin的功能

    from a in TableA where !(from b in TableB Where ... select b.Id).Contains(a.Id)

    生成出来的语句并非跟not in 完全一样的,而是用not exists(...),不过效果完全相同,

    展开全文
  • 我要生成SQL 语句如下: select r.UserID, r.UserName, max(StudentPoint) as ResultStudentPoint, max(CreateTime) as ResultCreateTime from CR_UserRecite r where PaperId='90F8533E-B2E0-42E2...

    先给大家说一下我的需求。

    我要生成的 SQL 语句如下:

    select r.UserID, r.UserName, max(StudentPoint) as ResultStudentPoint, max(CreateTime) as ResultCreateTime  from CR_UserRecite r     
    where PaperId='90F8533E-B2E0-42E2-8122-3A3FE3DDB49B'
    group by r.UserID,r.UserName order by ResultStudentPoint desc, ResultCreateTime desc

    其中 PaperID 是需要动态查询了,这里为了演示就写死了。

    经过在 Entity Framework 4.1 Code First 中尝试,写出如下的代码,满足了需求。

                // 其中 context 是 System.Data.Entity.DbContext 的类, TodayRank 是自己定义的类型
                // 下面代码是意思就是搜索特定 PagerID 的 UserRecite ,根据 r.UserID, r.UserName 分组,取每个人的最高分,根据最高分(降序)和时间(降序)排序
                IQueryable<TodayRank> query = from r in context.UserRecites
                                              where r.PaperID == new Guid("90f8533e-b2e0-42e2-8122-3a3fe3ddb49b&a=1")
                                              group r by new { r.UserID, r.UserName } into result
                                              let scoreMax = result.Max(n => n.StudentPoint)
                                              let createdTimeMax = result.Max(n => n.CreateTime)
                                              orderby scoreMax descending, createdTimeMax descending
                                              select new TodayRank()
                                              {
                                                  UserID = result.Key.UserID,
                                                  UserName = result.Key.UserName,
                                                  Score = scoreMax,
                                                  CreateTime = createdTimeMax
                                              };
                List<TodayRank> ltTodayRanks = query.Take(10).ToList();

     

    最后生成的 SQL 基本上也是满足需求的,只是代码比较多!

    看来 EF 还蛮够智能的,赞!

    exec sp_executesql N'SELECT TOP (10) 
    [Project3].[UserID] AS [UserID], 
    [Project3].[UserName] AS [UserName], 
    [Project3].[C2] AS [C1], 
    [Project3].[C3] AS [C2]
    FROM 
    (
        SELECT 
        [Project2].[C1] AS [C1], 
        [Project2].[UserID] AS [UserID], 
        [Project2].[UserName] AS [UserName], 
        CAST( [Project2].[C1] AS decimal(19,0)) AS [C2], 
        [Project2].[C2] AS [C3]
        FROM 
        ( 
            SELECT 
            [Project1].[C1] AS [C1], 
            [Project1].[UserID] AS [UserID], 
            [Project1].[UserName] AS [UserName], 
            (
                SELECT 
                MAX( [Extent2].[CreateTime] ) AS [A1]
                FROM [dbo].[CR_UserRecite] AS [Extent2]
                WHERE ( [Extent2].[PaperID] = @p__linq__0 ) AND 
                (
                    [Project1].[UserID] = [Extent2].[UserID]
                ) 
                AND 
                (
                    ( [Project1].[UserName] = [Extent2].[UserName] ) 
                    OR 
                    (
                        ( [Project1].[UserName] IS NULL ) 
                        AND ( [Extent2].[UserName] IS NULL )
                    )
                )
            ) AS [C2]
            FROM 
            ( 
                SELECT 
                [GroupBy1].[A1] AS [C1], 
                [GroupBy1].[K1] AS [UserID], 
                [GroupBy1].[K2] AS [UserName]
                FROM 
                ( 
                    SELECT 
                    [Extent1].[UserID] AS [K1], 
                    [Extent1].[UserName] AS [K2], 
                    MAX( [Extent1].[StudentPoint] ) AS [A1]
                    FROM [dbo].[CR_UserRecite] AS [Extent1]
                    WHERE [Extent1].[PaperID] = @p__linq__0
                    GROUP BY [Extent1].[UserID], [Extent1].[UserName]
                )  
                AS [GroupBy1]
                
            )  
            AS [Project1]
        )  
        AS [Project2]
    )  
    AS [Project3]
    ORDER BY [Project3].[C1] DESC, 
    [Project3].[C3] DESC',N'@p__linq__0 uniqueidentifier',@p__linq__0='90F8533E-B2E0-42E2-8122-3A3FE3DDB49B'

     

     

    谢谢浏览!

    转载于:https://www.cnblogs.com/Music/archive/2012/04/18/with-linq-expression-tree-generate-sql-in-entity-framework.html

    展开全文
  • 1 class Program 2 { ... sql = ... Console.WriteLine(sql); 9 Console.Read(); 10 } 11 }   转载于:https://www.cnblogs.com/Allen-Li/archive/2012/05/18/2507407.html
     1 class Program
     2     {
     3         static void Main(string[] args)
     4         {
     5             BreakAwayEntities context = new BreakAwayEntities();
     6             var query = from r in context.Reservations join p in context.Payments on r.ReservationID equals p.ReservationID select new { r.Customer, p.Reservation };
     7             string sql = ((ObjectQuery)query).ToTraceString();
     8             Console.WriteLine(sql);
     9             Console.Read();
    10         }
    11     }

     

    转载于:https://www.cnblogs.com/Allen-Li/archive/2012/05/18/2507407.html

    展开全文
  • To SQL生成SQL?  2. 在LINQ To SQL中怎样创建INNER和OUTER JOINS?  3. 怎样提高LINQ to SQL应用程序的性能?  4. 怎样从DataContext中“detach”实体?  5. 怎样控制DataContext的生存期?  ...
  • 基于LINQ TO SQL的多层架构中,如何将实体附加至不同的DataContext 最近更新: 2013-2-19 124 0 注意: 1.本文中所提到的“实体”均为由LINQ TO SQL生成的(即.dbml) 2.你需要了解...
  • linq to sql 在插入值的时候还是很方便。有时候我们需要在插入一个新实体之后得到那个实体的...通过观察linq to sql插入之后产生的sql发现,它自动生成了两条语句,一条insert,一条select,而且那条select正好就是查
  • 该系列教程描述了如何采用手动的方式映射你的对象类到数据表(而不是使用象SqlMetal这样的自动化工具)以便能够支持数据表... 第一篇:步步学LINQ toSQL:将类映射到数据库表  一旦你将数据库表映射到对应的类对象...
  • Linq To SQL 的问题点滴

    2015-12-29 09:43:00
    String 类型的字段问题 String类型的字段... 左关联 SQL关联中经常会用到左关联,那么Linq如何做? 那就需要 into 和 .DefaultIfEmpty() 大显身手。 Queryable集合查询过程中不能Select New T 两个相同类型(T )的 ...
  • 前面的演示,无论是说到如何生成外部XML映射文件,还是DBML文件,以及对这两种文件的验证,包括前一个演示关于如何使对象模型中的实体类对象可序列化,这些都是如何创建对象模型的问题。然而,在这些演示中,我们则...
  • 此示例代码主要用来示范如何LINQ to SQL的对象模型中生成映射到SQL用户定义的标量值函数的函数。SQL Server的标量值函数通常类似与如下的定义:CREATE FUNCTION ReverseCustName(@CustomerID nchar(5)) RETURNS ...
  • linq to sql 使用总结

    2019-09-22 21:21:34
    1、如何使用统一的DataContext 对象。 在使用2008 创建dbml类,每拖入个表格会创建一个与数据表名称一致的实体类:同时为每个dbml类自动生成一个继承 DataContext 类的自定义 DataContext 类。代码如下:PGP_...
  • 本文中所提到的“实体”均为由LINQ TO SQL生成的(即.dbml) 2.你需要了解LINQ TO SQL对表关联的实现方式,EntitySet 和 EntityRef 也许你看到标题后,会觉得问题比较抽象,那么我举个实例来具体说明一下问题。 ...
  • C#开发桌面程序的效率确实很高,今天就来总结下如何使用C#+Linq+SQL快速开发一个新的业务系统。 Linq是微软官方的轻量级的ORM工具,使用它结合SQL可以快速的生成实体类,再通过Linq操作可以快速的开发业务。 1、生成...
  • 在手写sql的年代,如果想从sqlserver数据库随机取几条数据,可以利用order by NewId()轻松实现,要实现多表查询也可以用select * from A,B Where A.ID=B.ID做到,但这些功能到了linq to sql如何实现呢?...
  • linq生成的更新语句where 语句会添加所有的字段,如何设置只依据主键值来更新。 具体做法,就是在Linq to SQL Designer中,把一些字段的UpdateCheck属性设置为Never,这样,这些字段在更新的时候,就不会再出现在...
  • 在上一篇文章中,介绍了如何访问 DataContext 对象,下面接着来讲解一下如何访问设计器中的表对象,并生成生体类代码。从 Northwind 数据库中拖一个表到设计器中。拖出来后,记得保存 dbml 文件,否则是无法访问到这...
  • 预备知识 在Linq to Sql中管理并发更新时的冲突(3):使用记录的时间戳进行检测 在上一讲中,我们提到了一些诸如“乐观并发控制”、“悲观并发控制”的概念,以及察看Linq to Sql自动生成sql语句的方法。...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 124
精华内容 49
关键字:

linq如何生成sql