查看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語法)) 結果如下:
第二種:
利用SQL Profiler來查詢執行時的SQL語法
首先可以在SQL Server Management Studio的工具中找到SQL Server Profiler
點左上角的新增追蹤
在事件選取範圍頁籤中可以設定要查詢的資料
如果想更精確的鎖定監看某個資料庫,可以點"顯示所有資料行" 然後點"資料行篩選"
點選左邊的DatabaseName,然後點開右邊的類似,我要監看的是Northwind資料庫,就輸入Northwind
然後將程式碼改成:
NorthwindEntities db = new NorthwindEntities();
var category = db.Customers.Where(p => p.CompanyName.Contains("B"));
return View(category);
程式執行時,就可以在SQL Profiler中抓到對SQL Server所下達的指令
另外這邊提供一個小技巧,在web.config的連線字串中,加入一小段話:
在連線字串的後面 加上 ;Application Name=”XXX”,之後用SQL Profiler的時候就可以看到
ApplicationName的欄位中有設定的名字,這可以幫助在查詢時很快的知道是從哪下達的指令。
第三種方法:
是利用LINQPad這個軟體來查詢
下載回來執行之後,有很多種使用方式,我這邊就直接用我建立的edmx檔來操作
在左邊選新增連線
然後選擇用自己的data context ,我用的是entity framework
接著選擇檔案,按Browse,選自己專案底下的bin資料夾中的.dll檔
設定完之後,就會看到我們建立的edmx所拉的table出現在左邊的框框中
接著呢,就直接在右邊下語法,就可以看到結果,也可以看到SQL指令囉