using System.Linq.Expressions; namespace YLErp.Modules.TradeModule.QueryModule { public class BatchGetTradeRelationDataService where T : DBModelBase { public List GetListByWhere(Expression> expression, DbSet dataSet, int batchSize = 500) { var result = new List(); var newExpression = expression; while (true) { var list = dataSet.AsNoTracking().Where(newExpression).OrderBy(p => p.id).Take(batchSize).ToList(); if (list != null && list.Count > 0) { result.AddRange(list); } if (list == null || list.Count < batchSize) { break; } var maxId = list.Max(p => p.id); newExpression = expression.And(p => p.id > maxId); } return result; } } }