查看LINQ Expression編譯後的SQL語法

查看LINQ Expression編譯後的SQL語法

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

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

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

LINQ所轉換的SQL語法。

第一種:

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

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

NorthwindEntities db = new NorthwindEntities();
var category = db.Customers.Where(p => p.CompanyName.Contains("B")) as ObjectQuery;
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

 

然後將程式碼改成:

NorthwindEntities db = new NorthwindEntities();
var category = db.Customers.Where(p => p.CompanyName.Contains("B"));
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