相對於其他 ORM,Kuick 最大的不同之一是同時支援「設計期已知」與「設計期未知」語法,這件事說來有些許抽象,簡單的說,設計期未知指的是「設計期使用參數決定操作的資料表、資料欄位與欄位值」,真正操作的標的在執行期才決定。
Kuick 支援絕大部份以物件操作選取資料的語法,包含 top, distinct, aggregate, paging, from, join, where, in, sub query, group by, having, order by,其中top 與 paging 語法,將依據不同類型資料庫而各有特定的實作內容,接下來區分成 2 篇介紹。
資料選取3步驟:1. 建立指令 >> 2. 設定條件 >> 3. 執行指令
<步驟1>建立指令物件
資料指令物件指的是 Kuick.Data.Sql,建立指令物件時需要明確知道操作那一個 Entity,所以在設計期已知時,由泛型指定 Entity 型別,設計期未知則改採參數傳入 Entity 名稱字串。有2個方法可以建立指令物件:
由Sql建構式產生指令物件
// 設計期已知
Sql sql = new Sql();
// 設計期未知
string entityName = "EmployeeEntity"; // 參數值可於執行期決定
Sql sql = new Sql(entityName);
藉由Entity靜態(static)方法產生指令物件
// 設計期已知
Sql sql = EmployeeEntity.Sql();
// 設計期未知
string entityName = "EmployeeEntity"; // 參數值可於執行期決定
Sql sql = new Sql(entityName);
<步驟2>設定選取條件
這裡指的選取條件,除了包含 SQL Command 的 Where 區段之外,還包含選取欄位、筆數與排序控制。如果選取邏輯太過複雜,建議直接撰寫 SQL Command 採行 dynamic 方式讀取資料,其他一般的選取條件方法如下(僅摘要常用部份):
SelectTop 選取前幾筆
Sql sql = EmployeeEntity
.Sql()
.SelectTop(2);
Distinct
Sql sql = EmployeeEntity
.Sql()
.Distinct(x => x.Email);
Where
Sql sql = EmployeeEntity
.Sql()
.Where(x => x.Flag == true);
Order By
Sql sql = EmployeeEntity
.Sql()
.Descending(x => x.FullName);
<步驟3>執行選取指令
Query
執行標準查詢,結果以List<IEntity>集合回傳。
List employees = EmployeeEntity
.Sql()
.Query();
QueryFirst
先呼叫 SelectTop(1) 之後執行標準查詢,結果為 IEntity 物件。
EmployeeEntity employee = EmployeeEntity
.Sql()
.QueryFirst();
LandscapeQuery
傳入某一筆資料PK,回傳特定排序與篩選條件下,該筆資料與前後各一筆資料集合。
這個功能常用於資料內容頁裡的上一筆與下一筆資料導覽連結。
List employees = EmployeeEntity
.Sql()
.LandscapeQuery("kevin");
Random
傳入選取筆數,回傳特定篩選條件下,隨機筆數資料集合。
List employees = EmployeeEntity
.Sql()
.Random(8);