• 查看LINQ Expression編譯後的SQL語法(转)


    在用了LINQ語法之後的一個月,我幾乎把SQL語法全部拋到腦後了,不過

    LINQ好用歸好用,但是實際上操作資料庫的還是SQL語法,如果不知道LINQ語法

    編譯過後產生怎樣的SQL語法,一不小心效能就會變差,所以今天來記錄三種查詢

    LINQ所轉換的SQL語法。

    第一種:

    參考自:ADO.Net Entity Framework : (一) 查詢執行時的SQL語法

    第一種方法應該只適用在Entity Framework,Linq to Sql有沒有這個或類似的方法我還沒去試

    1 NorthwindEntities db = new NorthwindEntities();
    2 var category = db.Customers.Where(p => p.CompanyName.Contains("B")) as ObjectQuery;
    3 return Content(category.ToTraceString());

    範例我是用北風資料庫的Customers資料表,然後將查詢語句轉成ObjectQuery

    命名空間:using System.Data.Objects;

    MSDN資料:http://msdn.microsoft.com/zh-tw/library/system.data.objects.objectquery.aspx

    就可以利用ToTraceString() 方法來將語法轉換成SQL語法

    (我的範例是用MVC做的,所以我直接return Content(SQL語法)) 結果如下:

    18a22dbe28b5429e9e155231a3d31408

    第二種:

    利用SQL Profiler來查詢執行時的SQL語法

    首先可以在SQL Server Management Studio的工具中找到SQL Server Profiler

    a78a5032a770442f85be501a754f99a2

    點左上角的新增追蹤

    e777846e566a492285ac7be2fc956d4a

    在事件選取範圍頁籤中可以設定要查詢的資料

    ef849133d8844d5ebbe17f770e340eb3

    如果想更精確的鎖定監看某個資料庫,可以點"顯示所有資料行" 然後點"資料行篩選"

    cb690af6008f42b29e2bb76babd48aa7

    點選左邊的DatabaseName,然後點開右邊的類似,我要監看的是Northwind資料庫,就輸入Northwind

    e77404e9ea2f4e0f8d3d3e5159179c33

    然後將程式碼改成:

    1 NorthwindEntities db = new NorthwindEntities();
    2 var category = db.Customers.Where(p => p.CompanyName.Contains("B"));
    3 return View(category);

    程式執行時,就可以在SQL Profiler中抓到對SQL Server所下達的指令

    6ddfbc413c584f1c923ea612d3257972

    另外這邊提供一個小技巧,在web.config的連線字串中,加入一小段話:

    f3e4c4962e194a04aec81dde8b9a64b3

    在連線字串的後面 加上 ;Application Name=”XXX”,之後用SQL Profiler的時候就可以看到

    d511e338d3814df0b8376ff3b8595864

    ApplicationName的欄位中有設定的名字,這可以幫助在查詢時很快的知道是從哪下達的指令。

    第三種方法:

    是利用LINQPad這個軟體來查詢

    參考自:LINQPad 有在用LINQ不可或缺的好工具

    官網:http://www.linqpad.net/

    下載回來執行之後,有很多種使用方式,我這邊就直接用我建立的edmx檔來操作

    在左邊選新增連線

    78ced0ecb9ff4570af5e90388e49ca4a

    然後選擇用自己的data context ,我用的是entity framework

    ce391ababec1425aabe50e0f0d02c846

    接著選擇檔案,按Browse,選自己專案底下的bin資料夾中的.dll檔

    667b1a485aa24538a96d27477768a29f

    他就會找出組件中所建立的edmx5462fce752dd46c58cbc8aaf02b3580e

    設定完之後,就會看到我們建立的edmx所拉的table出現在左邊的框框中

    4dbcb441c80247c8997968eba961747b

    接著呢,就直接在右邊下語法,就可以看到結果,也可以看到SQL指令囉

    84455c70d4914218ab947a9ddd3231ca

    db0947a766ee485e92151762f3cdf05a

  • 相关阅读:
    《Golang 学习笔记》— 从零开始搭建Go语言开发环境
    《面试专题》第四部分 并发编程进阶
    RabbitMQ 消息可靠性投递 + 消费
    《面试专题》第一部分 JVM 内存优化
    《面试专题》第二部分 java集合框架List
    9:画各种形状
    setTimeout模仿setInterval
    4:垂直水平居中
    3:BFC
    11:事件循环
  • 原文地址:https://www.cnblogs.com/qanholas/p/3678269.html
Copyright © 2020-2023  润新知