iT邦幫忙

DAY 9
3

Kuick Hands on Labs系列 第 9

Kuick Hands on Labs -- 9. Entity CRUD (5)

  • 分享至 

  • xImage
  •  

相對於其他 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個方法可以建立指令物件:

  1. 由Sql建構式產生指令物件

    // 設計期已知
    Sql sql = new Sql();

    // 設計期未知
    string entityName = "EmployeeEntity"; // 參數值可於執行期決定
    Sql sql = new Sql(entityName);

  2. 藉由Entity靜態(static)方法產生指令物件

    // 設計期已知
    Sql sql = EmployeeEntity.Sql();

    // 設計期未知
    string entityName = "EmployeeEntity"; // 參數值可於執行期決定
    Sql sql = new Sql(entityName);

<步驟2>設定選取條件
這裡指的選取條件,除了包含 SQL Command 的 Where 區段之外,還包含選取欄位、筆數與排序控制。如果選取邏輯太過複雜,建議直接撰寫 SQL Command 採行 dynamic 方式讀取資料,其他一般的選取條件方法如下(僅摘要常用部份):

  1. SelectTop 選取前幾筆

    Sql sql = EmployeeEntity
    .Sql()
    .SelectTop(2);

  2. Distinct

    Sql sql = EmployeeEntity
    .Sql()
    .Distinct(x => x.Email);

  3. Where

    Sql sql = EmployeeEntity
    .Sql()
    .Where(x => x.Flag == true);

  4. Order By

    Sql sql = EmployeeEntity
    .Sql()
    .Descending(x => x.FullName);

<步驟3>執行選取指令

  1. Query
    執行標準查詢,結果以List<IEntity>集合回傳。

    List employees = EmployeeEntity
    .Sql()
    .Query();

  2. QueryFirst
    先呼叫 SelectTop(1) 之後執行標準查詢,結果為 IEntity 物件。

    EmployeeEntity employee = EmployeeEntity
    .Sql()
    .QueryFirst();

  3. LandscapeQuery
    傳入某一筆資料PK,回傳特定排序與篩選條件下,該筆資料與前後各一筆資料集合。
    這個功能常用於資料內容頁裡的上一筆與下一筆資料導覽連結。

    List employees = EmployeeEntity
    .Sql()
    .LandscapeQuery("kevin");

  4. Random
    傳入選取筆數,回傳特定篩選條件下,隨機筆數資料集合。

    List employees = EmployeeEntity
    .Sql()
    .Random(8);


上一篇
Kuick Hands on Labs -- 8. Entity CRUD (4)
下一篇
Kuick Hands on Labs -- 10. Entity CRUD (6)
系列文
Kuick Hands on Labs30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

我要留言

立即登入留言