Git.Framework 框架隨手記--ORM查詢資料集合 一

賀臣發表於2014-05-14

  本文記錄Git.Framework之ORM中最為濃墨重彩的一篇,查詢集合。根據自己做的專案統計這個是使用頻率最高的一個。

 

  一. 查詢集合方法簡介

(1)List<T> GetList();
(2)List<T> GetList(bool isOpenTrans);
(3)List<T> GetList(T entity);
(4)List<V> GetList<V>(T entity) where V : class, new();
(5)List<T> GetList(T entity, bool isOpenTrans);
(6)List<V> GetList<V>(T entity, bool isOpenTrans) where V : class, new();

  我們依舊提供了一些雞肋方法,導致說話也無味,不想再說什麼了。

List<T> GetList();

  該方法返回對應的表中的所有資料行,包括每一個欄位

List<T> GetList(T entity);

  可以返回特定列以及新增篩選條件的集合資料

List<V> GetList<V>(T entity) where V : class, new();

  將查詢的資料結果集返回到特定的物件(可以是非對映的物件)中去,和前面的查詢物件是一樣的。

 

  二. 查詢結合使用案例

    List<T> GetList(); 返回所有的資料行
List<AdminEntity> list = this.Admin.GetList();

    這段程式碼返回Admin表中的所有資料行

    List<T> GetList(T entity); 這個函式可以使用條件篩選返回特定欄位行的資料集合
SysResourceEntity entity = new SysResourceEntity();
entity.IncludeAll();
entity.Where(a => a.IsDelete == (int)EIsDelete.NotDelete);
list = this.SysResource.GetList(entity);

    上面返回未刪除的資源資料集合,使用方式都在前面介紹過了,只是返回的資料型別不一樣。

    List<V> GetList<V>(T entity) where V : class, new();方法不再累述使用方式


  三. 查詢分頁
List<V> GetList<V>(T entity, int pageSize, int pageIndex, out int rowCount) where V : class, new();
List<T> GetList(T entity, int pageSize, int pageIndex, out int rowCount);
List<V> GetList<V>(T entity, int pageSize, int pageIndex, out int rowCount, bool isOpenTrans) where V : class, new();
List<T> GetList(T entity, int pageSize, int pageIndex, out int rowCount, bool isOpenTrans);

    在Git.Framework中提供了兩組方法用於查詢分頁。方法中有三個主要引數:

    T entity 查詢的主表對映物件

    int pageSize 查詢每頁的行數

    int pageIndex 查詢的頁數, 頁數起始值為1 

    out int rowCount 返回滿足條件的資料總行數

public override List<InStorDetailEntity> GetDetailList(InStorDetailEntity entity, ref PageInfo pageInfo)
{
     InStorDetailEntity detail = new InStorDetailEntity();
     detail.Where(a => a.OrderNum == entity.OrderNum);
     detail.IncludeAll();
     detail.OrderBy(a => a.ID, EOrderBy.DESC);
     int rowCount = 0;
     List<InStorDetailEntity> listResult = this.InStorDetail.GetList(detail, pageInfo.PageSize, pageInfo.PageIndex, out rowCount);
     pageInfo.RowCount = rowCount;
     return listResult;
}

     上面是一個比較簡單的查詢分頁,在上述程式碼中有一個引數 ref PageInfo pageInfo  這是一個分頁物件

[Serializable]
public class PageInfo
{
        public PageInfo();

        public int PageCount { get; set; } //頁數
        public int PageIndex { get; set; }//當前頁
        public int PageSize { get; set; }//每頁行數
        public int RowCount { get; set; }//總行數
}

    PageInfo是一個內建物件,我們不需要重新定義。但是查詢分頁的方法中有一個比較特殊的

detail.OrderBy(a => a.ID, EOrderBy.DESC);

    上面是一個排序的程式碼,在使用分頁的時候必須指定排序欄位以及排序型別,下面看看排序的型別 自然不用說了

public enum EOrderBy
{
        ASC = 0,
        DESC = 1,
}

    

  四. 查詢前幾行

    在SQL中有一個TOP關鍵字 可以查詢前幾行記錄,這個和分頁有點類似。在Git.Framework 中也提供了方法Top() 用於查詢前幾行資料

List<T> Top(T entity, int pageSize);
List<V> Top<V>(T entity, int pageSize) where V : class, new();
List<V> Top<V>(T entity, int pageSize, bool isOpenTrans) where V : class, new();
List<T> Top(T entity, int pageSize, bool isOpenTrans);
List<V> Top<V>(T entity, int skipSize, int pageSize) where V : class, new();
List<T> Top(T entity, int skipSize, int pageSize);
List<T> Top(T entity, int skipSize, int pageSize, bool isOpenTrans);
List<V> Top<V>(T entity, int skipSize, int pageSize, bool isOpenTrans) where V : class, new();

    T entity 查詢的主表物件 ; int skipSize 跳過多少航 ;   int pageSize查詢行數

List<T> Top(T entity, int pageSize);

    這個函式用於從第一行開始查詢幾行,如果pageSize大於資料行,則返回實際的資料行

InStorDetailEntity detail = new InStorDetailEntity();
detail.Where(a => a.OrderNum == entity.OrderNum);
detail.IncludeAll();
detail.OrderBy(a => a.ID, EOrderBy.DESC);
int rowCount = 0;
List<InStorDetailEntity> list = this.InStorDetail.Top(detail,12);

     這個函式和分頁函式一樣,都必須指定排序欄位以及排序型別

相關文章