這邊簡單介紹一下,ADO.Net Entity Framework 提供的三種查詢方式,
- Linq to Entities
- Query Builder Mothed
- Entity SQL Language
【Linq to Entities】
Linq to Entities 是最常見的語法,也是用最多的, 來看一個範例
2 |
using (TestEntities te = new TestEntities()) |
4 |
var user = from a in te.User |
5 |
where a.UserDepartment.UserDepartment_name == "經理部" |
語法是不是跟TSQL語法很像呢, 再來看另一種寫法,改用【Lambda】
1 |
////示範 Linq to Enities 改用 Lambda方式 |
2 |
using (TestEntities te = new TestEntities()) |
4 |
var user = te.User.Where(a => a.UserDepartment.UserDepartment_name == "經理部" ) |
5 |
.OrderBy(a => a.User_id) |
兩個範例執行完的結果都一樣,我個人是都採用Lambda的方式撰寫。
【Query Builder Mothed】
直接來看範例比較容易了解
1 |
////示範 Query Builder Mothed |
2 |
using (TestEntities te = new TestEntities()) |
4 |
var user = te.User.Where( "it.UserDepartment.UserDepartment_name == "經理部"" ) |
5 |
.OrderBy( "it.User_id" ); |
在查詢時,可以將要查詢的條件、欄位等語法,利用字串方式傳入, 透過Query Builder Mothed執行。 比較特別的是字串中的 "it" ,是保留字,代表自己。
【Entity SQL Language】
擷取一段 MSDN 上的說明,來解釋甚麼是 Entity SQL Language ” Entity SQL Language 是與 SQL 類似且與儲存體無關的語言。Entity SQL 的設計目標是用來查詢及管理以 實體資料模型 (EDM) 為基礎之物件的豐富物件圖形。” 簡單說 我們可以利用 Entity SQL Language 來執行查詢,"只有查詢唷",不支援更新、新增、刪除等動作, 為什麼要有 Entity SQL Language以及如何使用、跟一般TSQL差異等議題,在找機會來介紹, 這邊先簡單看一下示範語法
1 |
////示範 Entity SQL Language |
2 |
using (TestEntities te = new TestEntities()) |
4 |
string entitySQL = "SELECT Value a FROM User as a" ; |
5 |
entitySQL += " WHERE a.UserDepartment.UserDepartment_name == "經理部"" ; |
6 |
entitySQL += " Order by a.User_id" ; |
7 |
var user = te.CreateQuery<User>(entitySQL); |
上面的範例的執行結果都是一樣的, 我們來簡單做一下總結
比較
|
Linq to Entities |
Query Builder Mothed |
Entity SQL Language |
IntelliSence |
0 |
X |
X |
設計時期除錯 |
O |
X |
X |
動態查詢 |
X |
O |
O |
對Provider產生的SQL語法控制 |
一般 |
較好 |
最好 |
支援的函式 |
一般 |
多 |
多 |
開發速度 |
最佳 |
一般 |
一般 |
這邊簡單說明了三種查詢方式, 各位可以依照適合的情境去選擇。