mirror of
				https://github.com/nsnail/FreeSql.git
				synced 2025-11-04 17:20:49 +08:00 
			
		
		
		
	@@ -63,6 +63,17 @@ namespace restful.Controllers
 | 
			
		||||
            return _songRepository.Select.WhereIf(!string.IsNullOrEmpty(key), a => a.Title.Contains(key)).Page(page, limit).ToListAsync();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// curl -X GET "http://localhost:5000/restapi/Songs/GetPagingItems?key=FreeSql&PageNumber=2&PageSize=10" -H  "accept: text/plain"
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="pagingInfo"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        [HttpGet("GetPagingItems")]
 | 
			
		||||
        public Task<List<Song>> GetPagingItems([FromQuery] string key, [FromQuery] PagingInfo pagingInfo)
 | 
			
		||||
        {
 | 
			
		||||
            return _songRepository.Select.WhereIf(!string.IsNullOrEmpty(key), a => a.Title.Contains(key)).Page(pagingInfo).ToListAsync();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [HttpGet("{id}")]
 | 
			
		||||
        public Task<Song> GetItem([FromRoute] int id)
 | 
			
		||||
        {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										57
									
								
								Examples/repository_01/PagingInfo.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								Examples/repository_01/PagingInfo.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,57 @@
 | 
			
		||||
using FreeSql.Internal.Model;
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
 | 
			
		||||
namespace repository_01
 | 
			
		||||
{
 | 
			
		||||
    public class PagingInfo : BasePagingInfo
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 无参构造函数
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public PagingInfo()
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 当前为第1页,每页大小的构造函数
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="pageSize"></param>
 | 
			
		||||
        public PagingInfo(int pageSize)
 | 
			
		||||
        {
 | 
			
		||||
            PageNumber = 1;
 | 
			
		||||
            PageSize = pageSize;
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 带当前页和每页大小的构造函数
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="pageNumber"></param>
 | 
			
		||||
        /// <param name="pageSize"></param>
 | 
			
		||||
        public PagingInfo(int pageNumber, int pageSize)
 | 
			
		||||
        {
 | 
			
		||||
            PageNumber = pageNumber;
 | 
			
		||||
            PageSize = pageSize;
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 当前有多少页【只读】
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public long PageCount => PageSize == 0 ? 0 : (Count + PageSize - 1) / PageSize;
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 是否有上一页【只读】
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public bool HasPrevious => PageNumber > 1 && PageNumber <= PageCount;
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 是否有下一页【只读】
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public bool HasNext => PageNumber < PageCount;
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 是否在第一页【只读】
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public bool IsFrist => PageNumber == 1;
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 是否在最后一页【只读】
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public bool IsLast => PageNumber == PageCount;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -25,6 +25,18 @@ namespace restful.Controllers
 | 
			
		||||
            return _fsql.Select<Song>().WhereIf(!string.IsNullOrEmpty(key), a => a.Title.Contains(key)).Page(page, limit).ToListAsync();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// curl -X GET "http://localhost:5000/restapi/Songs/GetPagingItems?key=FreeSql&PageNumber=2&PageSize=10" -H  "accept: text/plain"
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="key"></param>
 | 
			
		||||
        /// <param name="pagingInfo"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        [HttpGet("GetPagingItems")]
 | 
			
		||||
        public Task<List<Song>> GetPagingItems([FromQuery] string key, [FromQuery] PagingInfo pagingInfo)
 | 
			
		||||
        {
 | 
			
		||||
            return _fsql.Select<Song>().WhereIf(!string.IsNullOrEmpty(key), a => a.Title.Contains(key)).Page(pagingInfo).ToListAsync();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [HttpGet("{id}")]
 | 
			
		||||
        public Task<Song> GetItem([FromRoute] int id)
 | 
			
		||||
        {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										57
									
								
								Examples/restful/PagingInfo.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								Examples/restful/PagingInfo.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,57 @@
 | 
			
		||||
using FreeSql.Internal.Model;
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
 | 
			
		||||
namespace restful
 | 
			
		||||
{
 | 
			
		||||
    public class PagingInfo : BasePagingInfo
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 无参构造函数
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public PagingInfo()
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 当前为第1页,每页大小的构造函数
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="pageSize"></param>
 | 
			
		||||
        public PagingInfo(int pageSize)
 | 
			
		||||
        {
 | 
			
		||||
            PageNumber = 1;
 | 
			
		||||
            PageSize = pageSize;
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 带当前页和每页大小的构造函数
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="pageNumber"></param>
 | 
			
		||||
        /// <param name="pageSize"></param>
 | 
			
		||||
        public PagingInfo(int pageNumber, int pageSize)
 | 
			
		||||
        {
 | 
			
		||||
            PageNumber = pageNumber;
 | 
			
		||||
            PageSize = pageSize;
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 当前有多少页【只读】
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public long PageCount => PageSize == 0 ? 0 : (Count + PageSize - 1) / PageSize;
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 是否有上一页【只读】
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public bool HasPrevious => PageNumber > 1 && PageNumber <= PageCount;
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 是否有下一页【只读】
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public bool HasNext => PageNumber < PageCount;
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 是否在第一页【只读】
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public bool IsFrist => PageNumber == 1;
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 是否在最后一页【只读】
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public bool IsLast => PageNumber == PageCount;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -2136,6 +2136,13 @@
 | 
			
		||||
            <param name="pageSize">每页多少</param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.ISelect0`2.Page(FreeSql.Internal.Model.BasePagingInfo)">
 | 
			
		||||
            <summary>
 | 
			
		||||
            分页
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="pagingInfo">分页信息</param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.ISelect0`2.Distinct">
 | 
			
		||||
            <summary>
 | 
			
		||||
            查询数据前,去重
 | 
			
		||||
@@ -2607,6 +2614,13 @@
 | 
			
		||||
            <param name="pageSize">每页多少</param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.ISelectGrouping`2.Page(FreeSql.Internal.Model.BasePagingInfo)">
 | 
			
		||||
            <summary>
 | 
			
		||||
            分页
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="pagingInfo">分页信息</param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.ISelectGrouping`2.Count">
 | 
			
		||||
            <summary>
 | 
			
		||||
            查询的记录数量
 | 
			
		||||
@@ -3976,6 +3990,26 @@
 | 
			
		||||
            <param name="commandTimeout"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="T:FreeSql.Internal.Model.BasePagingInfo">
 | 
			
		||||
            <summary>
 | 
			
		||||
            分页信息
 | 
			
		||||
            </summary>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="P:FreeSql.Internal.Model.BasePagingInfo.PageNumber">
 | 
			
		||||
            <summary>
 | 
			
		||||
            第几页,从1开始
 | 
			
		||||
            </summary>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="P:FreeSql.Internal.Model.BasePagingInfo.PageSize">
 | 
			
		||||
            <summary>
 | 
			
		||||
            每页多少
 | 
			
		||||
            </summary>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="P:FreeSql.Internal.Model.BasePagingInfo.Count">
 | 
			
		||||
            <summary>
 | 
			
		||||
            查询的记录数量
 | 
			
		||||
            </summary>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="P:FreeSql.Internal.Model.BatchProgressStatus`1.Data">
 | 
			
		||||
            <summary>
 | 
			
		||||
            当前操作的数据
 | 
			
		||||
 
 | 
			
		||||
@@ -402,6 +402,13 @@ namespace FreeSql
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        TSelect Page(int pageNumber, int pageSize);
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 分页
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="pagingInfo">分页信息</param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        TSelect Page(BasePagingInfo pagingInfo);
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 查询数据前,去重
 | 
			
		||||
        /// <para>
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,5 @@
 | 
			
		||||
using System;
 | 
			
		||||
using FreeSql.Internal.Model;
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq.Expressions;
 | 
			
		||||
using System.Text;
 | 
			
		||||
@@ -101,6 +102,13 @@ namespace FreeSql
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        ISelectGrouping<TKey, TValue> Page(int pageNumber, int pageSize);
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 分页
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="pagingInfo">分页信息</param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        ISelectGrouping<TKey, TValue> Page(BasePagingInfo pagingInfo);
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 查询的记录数量
 | 
			
		||||
        /// </summary>
 | 
			
		||||
 
 | 
			
		||||
@@ -319,6 +319,13 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
            return this.Limit(pageSize) as TSelect;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public TSelect Page(BasePagingInfo pagingInfo)
 | 
			
		||||
        {
 | 
			
		||||
            pagingInfo.Count = this.Count();
 | 
			
		||||
            this.Skip(Math.Max(0, pagingInfo.PageNumber - 1) * pagingInfo.PageSize);
 | 
			
		||||
            return this.Limit(pagingInfo.PageSize) as TSelect;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public TSelect Skip(int offset)
 | 
			
		||||
        {
 | 
			
		||||
            _skip = offset;
 | 
			
		||||
 
 | 
			
		||||
@@ -201,6 +201,14 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
            return this;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public ISelectGrouping<TKey, TValue> Page(BasePagingInfo pagingInfo)
 | 
			
		||||
        {
 | 
			
		||||
            pagingInfo.Count = this.Count();
 | 
			
		||||
            _groupBySkip = Math.Max(0, pagingInfo.PageNumber - 1) * pagingInfo.PageSize;
 | 
			
		||||
            _groupByLimit = pagingInfo.PageSize;
 | 
			
		||||
            return this;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public long Count() => _select._cancel?.Invoke() == true ? 0 : long.TryParse(string.Concat(_orm.Ado.ExecuteScalar(_select._connection, _select._transaction, CommandType.Text, $"select count(1) from ({this.ToSql($"1{_comonExp._common.FieldAsAlias("as1")}")}) fta", _select._commandTimeout, _select._params.ToArray())), out var trylng) ? trylng : default(long);
 | 
			
		||||
        public ISelectGrouping<TKey, TValue> Count(out long count)
 | 
			
		||||
        {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										25
									
								
								FreeSql/Internal/Model/BasePagingInfo.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								FreeSql/Internal/Model/BasePagingInfo.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,25 @@
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Text;
 | 
			
		||||
 | 
			
		||||
namespace FreeSql.Internal.Model
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// 分页信息
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public class BasePagingInfo
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 第几页,从1开始
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public int PageNumber { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 每页多少
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public int PageSize { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 查询的记录数量
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public long Count { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user