现在使用的方法是检查从DB读取的数组的大小。只要对其执行其他操作,这种背负就可以了。但是,我想知道是否有一种更直接的方法来查询现有的联系人数量。
我正在用C#编写代码,但是为了以防万一,JS也将变得很了解。
QueryExpression query = new QueryExpression
{
EntityName = "contact",
ColumnSet = new ColumnSet(true),
};
EntityCollection response = organizationService.RetrieveMultiple(query);
IEnumerable<Entity> entities = response.Entities;
您可以在响应上使用TotalRecordCount。
Console.WriteLine("Total number of records: " + response.TotalRecordCount);
这是您的选择:
这里是检索计数所需的Fetch XML和C#代码:
var xml = @"
<fetch distinct='false' mapping='logical' aggregate='true'>
<entity name='contact'>
<attribute name='contactid' alias='contact_count' aggregate='count'/>
</entity>
</fetch>";
using (var service = GetOrganizationServiceProxy())
{
var resultEntity = service.RetrieveMultiple(
new FetchExpression(xml)).Entities.First();
var count = resultEntity
.GetAttributeValue<Microsoft.Xrm.Sdk.AliasedValue>("contact_count").Value;
}
最多可以合并50,000个实体。 See this SO question
如果此限制太低,您可以按照SO问题的建议进行操作,并捕获异常并仅返回50,000。如果您需要一个精确的计数,可能要做的简单事情是添加一个过滤器以将名称限制为以单个字母开头,然后执行26个不同的查询,每个字母一个。假设名称的分配完全统一(不是),您应该能够获得的最大计数为1,300,000。
Microsoft网站明确指出只有Fetch XML支持分组/聚合功能-> http://msdn.microsoft.com/en-us/library/gg334607.aspx
现在有一个简单的请求来获取总数:https://docs.microsoft.com/en-us/dotnet/api/microsoft.crm.sdk.messages.retrievetotalrecordcountrequest?view=dynamics-general-ce-9
您可以通过计数聚合来执行FetchXML。
我假设您正在从数据库中执行某种选择语句,并查看返回的DataTable对象以查看其具有多少行。
尝试做一个
SELECT COUNT(*) FROM [TableName] WHERE [condition]
这将返回一个与行数相同的数字。