Add Queryable.Foreach

This commit is contained in:
sunkaixuan 2022-03-27 21:11:14 +08:00
parent 1df9b04fa8
commit 4f61d7e03b
3 changed files with 25 additions and 0 deletions

View File

@ -185,6 +185,13 @@ namespace OrmTest
var test30= db.Queryable<Order>().Select(it => new { x = SqlFunc.LessThanOrEqual(1, 2) }).ToList();
var test31 = db.Queryable<Order>().Select(it => new { x = SqlFunc.GreaterThan(1, 2) }).ToList();
var test32 = db.Queryable<Order>().Select(it => new { x = SqlFunc.GreaterThanOrEqual(1, 2) }).ToList();
List<Order> result = new List<Order>();
db.Queryable<Order>().ForEach(it =>
{
result.Add(it);
},10);
var test33= db.Queryable<Order>().ToList();
Console.WriteLine("#### Examples End ####");
}

View File

@ -1276,6 +1276,23 @@ namespace SqlSugar
InitMapping();
return _ToList<T>();
}
public virtual void ForEach(Action<T> action, int singleMaxReads = 300,System.Threading.CancellationTokenSource cancellationTokenSource = null)
{
Check.Exception(this.QueryBuilder.Skip > 0 || this.QueryBuilder.Take > 0, ErrorMessage.GetThrowMessage("no support Skip take, use PageForEach", "不支持Skip Take,请使用 Queryale.PageForEach"));
var totalNumber = 0;
var totalPage = 1;
for (int i = 1; i <= totalPage; i++)
{
if (cancellationTokenSource?.IsCancellationRequested == true) return;
var queryable = this.Clone();
var page = queryable.ToPageList(i, singleMaxReads, ref totalNumber, ref totalPage);
foreach (var item in page)
{
if (cancellationTokenSource?.IsCancellationRequested == true) return;
action.Invoke(item);
}
}
}
public List<T> ToOffsetPage(int pageIndex, int pageSize)
{
if (this.Context.CurrentConnectionConfig.DbType != DbType.SqlServer)

View File

@ -108,6 +108,7 @@ namespace SqlSugar
ISugarQueryable<TResult> Select<TResult>(string select);
ISugarQueryable<T> Select(string select);
ISugarQueryable<T> MergeTable();
void ForEach(Action<T> action, int singleMaxReads = 300, System.Threading.CancellationTokenSource cancellationTokenSource = null);
int Count();
Task<int> CountAsync();