get*_*ode 3 linq asp.net sdk dynamics-crm dynamics-crm-2015
我一直在努力为Dynamics CRM 2015 SDK编写Linq查询OrganizationServiceContext.我发现CRM Linq Provider不支持我想要使用的Linq方法.
最新的是Count().我有一个IQuerable<Lead>对象,想要计算枚举时返回的总记录数.但是调用Count()an IQueryable会给出错误:
不支持"Count"方法
挖掘我发现这个建议是将Linq查询定义为IEnumerable.这似乎有效 - 调用Count()该IEnumerable<Lead>对象返回总记录.
我想知道的是枚举操作发生的地方.它是动力学方面,还是将所有线索拉入我的网络服务器内存并计数?我首先进行计数的全部原因是为了防止将太大的数据集拉入内存......
LINQ for CRM查询被转换为QueryExpression查询,因此仅限于其功能.QueryExpression查询不支持聚合(如count,sum,average),因此您的查询确实会将所有选定的记录拉入内存.
获得正确计数的首选方法是使用FetchXml查询.
计数QueryExpression也可以通过以下方式实现.(我不确定这是如何转换为SQL的;它的性能可能略低一些.)
这是一个例子:
var query = new QueryExpression("account")
{
PageInfo = new PagingInfo
{
Count = 1,
PageNumber = 1,
ReturnTotalRecordCount = true
}
};
var result = service.RetrieveMultiple(query);
if (result.TotalRecordCountLimitExceeded)
throw new InvalidOperationException("Cannot get record count.");
return result.TotalRecordCount;
Run Code Online (Sandbox Code Playgroud)
如您所见,可计算的记录数量有限制.我相信它目前是50,000.在OnPremise部署中,您可以配置此限制.
| 归档时间: |
|
| 查看次数: |
994 次 |
| 最近记录: |