Git.Framework 框架随手记--ORM查询数据集合 一
2014-05-14 08:03 贺臣 阅读(2123) 评论(0) 编辑 收藏 举报本文记录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);
这个函数和分页函数一样,都必须指定排序字段以及排序类型