EF提供的三种查询方式

时间:2023-01-01 22:48:11

這邊簡單介紹一下,ADO.Net Entity Framework 提供的三種查詢方式,

  1. Linq to Entities
  2. Query Builder Mothed
  3. Entity SQL Language

【Linq to Entities】

Linq to Entities 是最常見的語法,也是用最多的,
來看一個範例

////示範 Linq to Enities
using (TestEntities te = new TestEntities())
{
    var user = from a in te.User
               where a.UserDepartment.UserDepartment_name == "經理部"
               orderby a.User_id
               select a;
}

語法是不是跟TSQL語法很像呢,
再來看另一種寫法,改用【Lambda】

////示範 Linq to Enities 改用 Lambda方式
using (TestEntities te = new TestEntities())
{
    var user = te.User.Where(a => a.UserDepartment.UserDepartment_name == "經理部")
                      .OrderBy(a => a.User_id)
                      .Select(a => a);
}

兩個範例執行完的結果都一樣,我個人是都採用Lambda的方式撰寫。

【Query Builder Mothed】

直接來看範例比較容易了解

////示範 Query Builder Mothed
using (TestEntities te = new TestEntities())
{
    var user = te.User.Where("it.UserDepartment.UserDepartment_name == \"經理部\"")
                      .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差異等議題,在找機會來介紹,
這邊先簡單看一下示範語法

////示範 Entity SQL Language
using (TestEntities te = new TestEntities())
{
    string entitySQL = "SELECT Value a FROM User as a";
    entitySQL += " WHERE a.UserDepartment.UserDepartment_name == \"經理部\"";
    entitySQL += " Order by a.User_id";
    var user = te.CreateQuery<User>(entitySQL);
}

上面的範例的執行結果都是一樣的,
我們來簡單做一下總結

比較

  Linq to Entities Query Builder Mothed Entity SQL Language
IntelliSence
設計時期除錯
動態查詢
對Provider產生的SQL語法控制 一般 較好 最好
支援的函式 一般
開發速度 最佳 一般 一般

這邊簡單說明了三種查詢方式,
各位可以依照適合的情境去選擇。