我有两个问题:
第一个问题:出于性能原因,我知道在查询记录时查询限制为5,000条,但在进行聚合查询时是否存在限制?如果是这样,它是什么?我只需要查询记录数量,对于一个实体,我可以获得39,000多条记录的结果,但对于另一个实体,我看到的错误信息如下:
System.ServiceModel.FaultException 1[Microsoft.Xrm.Sdk.OrganizationServiceFault]: AggregateQueryRecordLimit exceeded. Cannot perform this operation. (Fault Detail is equal to Microsoft.Xrm.Sdk.OrganizationServiceFault).
我一直在网上查找但在查询限制中找不到任何有关聚合/计数查询的内容。
第二个问题:是否有一种简单的方法可以在没有性能影响的情况下查询大量记录的COUNT?我不认为进行计数应该需要太多的开销。如果有限制,我的想法是在循环中实现分页,只检索给定页面的计数,同时每次递增页码,直到返回0条记录。但是,当我尝试此操作时,它似乎忽略了初始page
标记的count
和<Fetch>
属性。
我想知道是否有更好/更简单的方法来做到这一点?
答案 0 :(得分:3)
我对你的第一个问题说不出多少,但它看起来像someone on MSDN may have found a workaround。请参阅链接的论坛帖子以获取实用的解决方案。
对于第二个问题,COUNT
相对容易处理。有关大量示例,请参阅MSDN article on FetchXML aggregates。
<fetch distinct='false' mapping='logical' aggregate='true'>
<entity name='opportunity'>
<attribute name='name' alias='opportunity_count' aggregate='count'/>
</entity>
</fetch>
该查询生成的SQL如下:
SELECT
COUNT(*) AS opportunity_count
FROM
Opportunity