查看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語法)) 結果如下:
![]()
第二種:
利用SQL Profiler來查詢執行時的SQL語法
首先可以在SQL Server Management Studio的工具中找到SQL Server Profiler
![]()
點左上角的新增追蹤
![]()
在事件選取範圍頁籤中可以設定要查詢的資料
![]()
如果想更精確的鎖定監看某個資料庫,可以點"顯示所有資料行" 然後點"資料行篩選"
![]()
點選左邊的DatabaseName,然後點開右邊的類似,我要監看的是Northwind資料庫,就輸入Northwind
![]()
然後將程式碼改成:
1 |
NorthwindEntities db = new NorthwindEntities(); |
2 |
var category = db.Customers.Where(p => p.CompanyName.Contains("B")); |
3 |
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![]()
設定完之後,就會看到我們建立的edmx所拉的table出現在左邊的框框中
![]()
接著呢,就直接在右邊下語法,就可以看到結果,也可以看到SQL指令囉
![]()
![]()
查看LINQ Expression編譯後的SQL語法(转)的更多相关文章
- SQL 語法
查詢 Sql = ("SELECT A1, A2, A5, A4 FROM Table1 ") 筆數 Sql = ("Select COUNT(*) From TW01. ...
- 查看Linq to Sql生成的sql语句(转)
查看Linq to Sql生成的sql语句 在控制台项目中,比较简单,直接db.Log = Console.Out;就OK了 但是在其他项目中,需要处理如下: StreamWriter sw = ...
- [LINQ2Dapper]最完整Dapper To Linq框架(五)---查看Linq实际执行的SQL
此例子是使用LINQ2Dapper封装,效率优于EntityFramwork,并且支持.NetFramework和.NetCore框架,只依赖于Dapper支持.net framework4.6.1及 ...
- MAC下反編譯安卓APK
所需工具: 1.apktool http://ibotpeaches.github.io/Apktool/ (配置說明) https://bitbucket.org/iBotPeac ...
- [Linq Expression]练习自己写绑定
源代码:TypeMapper.zip 背景 项目中,我们会经常用到各种赋值语句,比如把模型的属性赋值给UI,把视图模型的属性拷贝给Entity.如果模型属性太多,赋值也会变成苦力活.所以,框架编程的思 ...
- CentOS 7 編譯qBittorrent Web UI安裝指南
前言 以下是安装qBittorrent教学. 适用于CentOS7或更新版本 适用于qBittorrent4.1.5或更新版本 安裝須知 qBittorrent基于libtorrent,所以必须先安装 ...
- 【转】編譯Ogre1.9 IOS Dependencies及Ogre Source步驟及相關注意事項…
http://makedreamvsogre.blogspot.tw/2014/01/ios-dependenciesogre-source.html 可能有人會想問我為什麼要自行編譯IOS Depe ...
- llvm學習(二)————llvm編譯與環境構建
本文由博主原创,转载请注明出处(保留此处和链接): IT人生(http://blog.csdn.net/robinblog/article/details/17339027) 在2011十月份的时候, ...
- C 語言中的編譯指示 (Pragma)
編譯指示 #pragma 是用來告知編譯器某些特殊指示,例如不要輸出錯誤訊息,抑制警告訊息,或者加上記憶體漏洞檢查機制等.這些指示通常不是標準的 C 語言所具備的,而是各家編譯器廠商或開發者所制定的, ...
随机推荐
- UOJ.386.[UNR #3]鸽子固定器(贪心 链表)
题目链接 \(Description\) 选最多\(m\)个物品,使得它们的\((\sum vi)^{dv}-(s_{max}-s_{min})^{du}\)最大. \(Solution\) 先把物品 ...
- BZOJ.3998.[TJOI2015]弦论(后缀自动机)
题目链接 \(Description\) 给定字符串S,求其第K小子串.(若T=0,不同位置的相同子串算1个:否则算作多个) \(Solution\) 建SAM,处理出对于每个节点,它和它的所有后继包 ...
- 格式化p6spy的输出日志
众所周知, p6spy打印出来的日志是一行很长很长的内容, 很不容易查看, 牛B的p6spy为什么就不能想hibernate那样有format_sql的功能? 竟然没有, 我只好自己动手写一个日志输出 ...
- 8、Redis中sort命令详解
写在前面的话:读书破万卷,编码如有神 ------------------------------------------------- 1.排序 (1)sort:可以对List.Set.ZSet里面 ...
- MHDD硬盘坏道检测修复教程(转)
MHDD算是在DOS下比较专业的检测工具,比一些GUI的好用很多,并且现在有人专门做成硬件机器卖到了电脑城,电脑城一般倒卖硬盘的都使用这种机器. 进入MHDD 上面图片中就可以看到硬盘是ST34081 ...
- 你的产品适不适合做微信小程序?你需要这篇产品逻辑分析
自2017年1月9日张小龙宣布万众瞩目的“微信小程序”正式上线了.以名字看,感觉像是突出了“将你的程序接入微信”的意思. 我们此前分析过微信的功能迭代节奏:一般微信重要的功能规划周期,大约会在在9 ...
- ftp通用类2
using System; using System.Net; using System.IO; using System.Text; using System.Net.Sockets; /// &l ...
- 如何在socket编程的Tcp连接中实现心跳协议
from http://blog.csdn.net/nyist327/article/details/39586203 心跳包的发送,通常有两种技术方法1:应用层自己实现的心跳包 由应用程序自己发送心 ...
- 对数据集“dsArea”执行查询失败。 (rsErrorExecutingCommand),Query execution failed for dataset 'dsArea'. (rsErrorExecutingCommand),Manually process the TFS data warehouse and analysis services cube
错误提示: 处理报表时出错. (rsProcessingAborted)对数据集“dsArea”执行查询失败. (rsErrorExecutingCommand)Team System 多维数据集或者 ...
- android模拟器修改时间
我们看右上角的模拟器的时间,是不是和我们现在时间不同步呢 点击主菜单之后,我们找到下边的设置的按钮 下边找到时间和日期, 怎么把页面修改中文, 可以看(安卓模拟器怎么修改语言)的经验 ...