业务场景:很多情况下一个集合得数据可能过于庞大,需要批次去处理。
比如 一共有360条数据,50为一组去处理 那么就需要 8组,所以需要注意的就是最后一次不够50的话,要算出来10。
所以需要用到的方法就是 GetRange
public bool PushProductToBInit()
{
//获取当前商品
var pushlist = _productToBService.GetAllProductToBSysNoList();
//分批次数
var oneCount = 50;
var pushTimes = pushlist.Count % oneCount == 0 ? (pushlist.Count / oneCount) : (pushlist.Count / oneCount + 1);
var pushonelist = new List<ProductToBUpdatePushModel>();
for (var i = 0; i < pushTimes; i++)
{
if (i==(pushTimes-1))
{
//最后一次 找到剩下数量
pushonelist = pushlist.GetRange(oneCount * i, pushlist.Count - (oneCount * i));
}
else
{
pushonelist= pushlist.GetRange(oneCount * i, oneCount);
}
PushESB_ProductToB.GetInstance().Push_ProducUpdateToBTopic(pushonelist);
}
return true;
}
但是如果获取数据源 不知道多少的情况下 比如50一次取 就用do while
int pageIndex = 1;
bool hasResult = true;
do
{
var query = importDto;
query.PageIndex = pageIndex;
query.PageSize = 50;
var listCompanyOrder = GetUnshippedSalesAppletCompanyOrderListRetry(query);
hasResult = listCompanyOrder != null && Util.HasMore(listCompanyOrder);
if (hasResult)
{
list.AddRange(listCompanyOrder);
}
pageIndex++;
if (pageIndex > 90000)
{
//防止死循环
hasResult = false;
}
} while (hasResult);