/// <summary> /// 使用 sql 语句来查询实体。 /// </summary> /// <param name="sql">sql 语句,返回的结果集的字段,需要保证与属性映射的字段名相同。</param> /// <param name="paging">分页信息。</param> /// <param name="eagerLoad">需要贪婪加载的属性。</param> /// <returns></returns> public EntityList QueryList(FormattedSql sql, PagingInfo paging = null, EagerLoadOptions eagerLoad = null) { var args = new SqlQueryArgs(sql); args.SetDataLoadOptions(paging, eagerLoad); return(this.QueryList(args)); }
/// <summary> /// 使用 sql 语句来查询实体。 /// </summary> /// <param name="args">The arguments.</param> /// <returns></returns> /// <exception cref="System.NotSupportedException">使用内存过滤器的同时,不支持提供分页参数。</exception> public EntityList QueryList(SqlQueryArgs args) { this.PrepareArgs(args); var entityList = args.EntityList; var oldCount = entityList.Count; bool autoIndexEnabled = entityList.AutoTreeIndexEnabled; try { //在加载数据时,自动索引功能都不可用。 entityList.AutoTreeIndexEnabled = false; QueryListCore(args, entityList); } finally { entityList.AutoTreeIndexEnabled = autoIndexEnabled; } this.EagerLoadOnCompleted(args, entityList, oldCount); return(entityList); }
/// <summary> /// 从持久层中查询数据。 /// 本方法只能由仓库中的方法来调用。本方法的返回值的类型将与仓库中方法的返回值保持一致。 /// 支持的返回值:EntityList、Entity、int、LiteDataTable。 /// </summary> /// <param name="args"></param> /// <returns></returns> public object QueryData(SqlQueryArgs args) { this.PrepareArgs(args); var entityList = args.EntityList; var oldCount = entityList.Count; bool autoIndexEnabled = entityList.AutoTreeIndexEnabled; try { //在加载数据时,自动索引功能都不可用。 entityList.AutoTreeIndexEnabled = false; this.QueryDataCore(args, entityList); } finally { entityList.AutoTreeIndexEnabled = autoIndexEnabled; } this.EagerLoadOnCompleted(args, entityList, oldCount); return(ReturnForRepository(entityList)); }
/// <summary> /// 子类重写此方法,查询从持久层加载列表的具体实现。 /// </summary> /// <param name="args">The arguments.</param> /// <param name="entityList">The entity list.</param> protected virtual void QueryListCore(SqlQueryArgs args, EntityList entityList) { var dataProvider = RdbDataProvider.Get(Repo); using (var dba = dataProvider.CreateDbAccesser()) { //访问数据库 if (args.Filter != null) { #region 内存过滤式加载 if (!PagingInfo.IsNullOrEmpty(args.PagingInfo)) { throw new NotSupportedException("使用内存过滤器的同时,不支持提供分页参数。"); } args.EntityType = Repo.EntityType; args.MemoryList = new List <Entity>(); dataProvider.DbTable.QueryList(dba, args); this.LoadByFilter(args); #endregion } else { if (args.FetchType == FetchType.Count) { #region 查询 Count var value = dba.QueryValue(args.FormattedSql, args.Parameters); var count = RdbTable.ConvertCount(value); entityList.SetTotalCount(count); #endregion } else { //是否需要为 PagingInfo 设置统计值。 var pagingInfoCount = !PagingInfo.IsNullOrEmpty(args.PagingInfo) && args.PagingInfo.IsNeedCount; //如果 pagingInfoCount 为真,则在访问数据库时,会设置好 PagingInfo 的总行数。 args.EntityType = Repo.EntityType; dataProvider.DbTable.QueryList(dba, args); //最后,还需要设置列表的 TotalCount。 if (pagingInfoCount) { entityList.SetTotalCount(args.PagingInfo.TotalCount); } } } } }
/// <summary> /// 使用 sql 语句来查询实体。 /// </summary> /// <param name="args">The arguments.</param> /// <returns></returns> /// <exception cref="System.NotSupportedException">使用内存过滤器的同时,不支持提供分页参数。</exception> public EntityList QueryList(SqlQueryArgs args) { this.PrepareArgs(args); var entityList = args.EntityList; var oldCount = entityList.Count; bool autoIndexEnabled = entityList.AutoTreeIndexEnabled; try { //在加载数据时,自动索引功能都不可用。 entityList.AutoTreeIndexEnabled = false; QueryListCore(args, entityList); } finally { entityList.AutoTreeIndexEnabled = autoIndexEnabled; } this.EagerLoadOnCompleted(args, entityList, oldCount); return entityList; }
/// <summary> /// 从持久层中查询数据。 /// 本方法只能由仓库中的方法来调用。本方法的返回值的类型将与仓库中方法的返回值保持一致。 /// 支持的返回值:EntityList、Entity、int、LiteDataTable。 /// </summary> /// <param name="args"></param> /// <returns></returns> public object QueryData(SqlQueryArgs args) { return(this.DataQueryer.QueryData(args)); }
/// <summary> /// 使用 sql 语句来查询实体。 /// </summary> /// <param name="sql">sql 语句,返回的结果集的字段,需要保证与属性映射的字段名相同。</param> /// <param name="paging">分页信息。</param> /// <param name="eagerLoad">需要贪婪加载的属性。</param> /// <returns></returns> public EntityList QueryList(FormattedSql sql, PagingInfo paging = null, EagerLoadOptions eagerLoad = null) { var args = new SqlQueryArgs(sql); args.SetDataLoadOptions(paging, eagerLoad); return this.QueryList(args); }
/// <summary> /// 子类重写此方法,查询从持久层加载列表的具体实现。 /// </summary> /// <param name="args">The arguments.</param> /// <param name="entityList">The entity list.</param> protected virtual void QueryListCore(SqlQueryArgs args, EntityList entityList) { var dataProvider = RdbDataProvider.Get(Repo); using (var dba = dataProvider.CreateDbAccesser()) { //访问数据库 if (args.Filter != null) { #region 内存过滤式加载 if (!PagingInfo.IsNullOrEmpty(args.PagingInfo)) { throw new NotSupportedException("使用内存过滤器的同时,不支持提供分页参数。"); } args.EntityType = Repo.EntityType; args.MemoryList = new List<Entity>(); dataProvider.DbTable.QueryList(dba, args); this.LoadByFilter(args); #endregion } else { if (args.FetchType == FetchType.Count) { #region 查询 Count var value = dba.QueryValue(args.FormattedSql, args.Parameters); var count = RdbTable.ConvertCount(value); entityList.SetTotalCount(count); #endregion } else { //是否需要为 PagingInfo 设置统计值。 var pagingInfoCount = !PagingInfo.IsNullOrEmpty(args.PagingInfo) && args.PagingInfo.IsNeedCount; //如果 pagingInfoCount 为真,则在访问数据库时,会设置好 PagingInfo 的总行数。 args.EntityType = Repo.EntityType; dataProvider.DbTable.QueryList(dba, args); //最后,还需要设置列表的 TotalCount。 if (pagingInfoCount) { entityList.SetTotalCount(args.PagingInfo.TotalCount); } } } } }
/// <summary> /// 使用 sql 语句来查询实体。 /// </summary> /// <param name="args">The arguments.</param> /// <returns></returns> /// <exception cref="System.NotSupportedException">使用内存过滤器的同时,不支持提供分页参数。</exception> protected EntityList QueryList(SqlQueryArgs args) { return(this.DataQueryer.QueryList(args)); }
/// <summary> /// 使用 sql 语句来查询实体。 /// </summary> /// <param name="args">The arguments.</param> /// <returns></returns> /// <exception cref="System.NotSupportedException">使用内存过滤器的同时,不支持提供分页参数。</exception> protected EntityList QueryList(SqlQueryArgs args) { return this.DataQueryer.QueryList(args); }