QueryExpression查找结果分页


RetrieveMultiple()

查询Entity Recoed写法:

QueryExpression queryExpression = new QueryExpression("account");
queryExpression.ColumnSet = new ColumnSet(true);
EntityCollection WordOrderList = service.RetrieveMultiple(queryExpression );

如果用RetrieveMultiple()的话,Recoed >5000,就不会显示 5000之后的,所以查找的记录大于5000条的时候,需要分页。正确的做法可以参考如下代码:

QueryExpression queryExpression = new QueryExpression("account");
queryExpression.ColumnSet = new ColumnSet(true);
//EntityCollection WordOrderList = service.RetrieveMultiple(queryExpression );
EntityCollection WordOrderList = RetrieveAll(orgService, queryExpression);

/// 
/// 根据QueryExpression查询所有记录(多页)
/// 
/// 
/// 
/// EntityCollection(nullable)
public static EntityCollection RetrieveAll(IOrganizationService service, QueryExpression query)
{
   EntityCollection result = new EntityCollection();
   int pageNum = 1;
   int pageSize = 5000;
   while (true)
     {
        query.PageInfo = new PagingInfo
          {
             Count = pageSize,
             PageNumber = pageNum,
             PagingCookie = pageNum == 1 ? null : result.PagingCookie
          };
             pageNum++;
             EntityCollection pageResult = service.RetrieveMultiple(query);
             result.Entities.AddRange(pageResult.Entities);
             result.PagingCookie = pageResult.PagingCookie;
             //没有更多记录就跳出循环
             if (!pageResult.MoreRecords)
             {
                 break;
             }
          }
            return result.Entities.Count == 0 ? null : result;
      }