本文記錄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);
這個函式和分頁函式一樣,都必須指定排序欄位以及排序型別