gpt4 book ai didi

asp.net - CRM 2015 Linq Count() 查询 - 这是在枚举查询吗?

转载 作者:行者123 更新时间:2023-12-01 11:31:43 24 4
gpt4 key购买 nike

我一直在努力针对 Dynamics CRM 2015 SDK 编写 Linq 查询 OrganizationServiceContext .我发现 CRM Linq 提供程序通常不支持我想使用的 Linq 方法。

最新的是Count() .我有一个 IQuerable<Lead>对象并希望计算枚举时将返回的总记录数。但是调用Count()IQueryable 上给出错误:

The method 'Count' is not supported

四处挖掘我发现了this advice这是将 Linq 查询定义为 IEnumerable .这似乎有效 - 调用 Count()IEnumerable<Lead> 上对象返回总记录数。

我想知道的是枚举操作发生的地方。是动态方面,还是将所有潜在客户拉入我的网络服务器内存并在那里计数?我首先执行计数的全部原因是防止将太大的数据集拉入内存......

最佳答案

LINQ for CRM 查询被转换为 QueryExpression 查询,因此仅限于其功能。 QueryExpression 查询不支持聚合(如计数、总和、平均值),因此您的查询确实会将所有选定的记录拉入内存。

获得正确计数的首选方法是使用 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;

如您所见,可以统计的记录数是有限制的。我相信目前是50,000。在 OnPremise 部署中,您可以配置此限制。

关于asp.net - CRM 2015 Linq Count() 查询 - 这是在枚举查询吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31559467/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com