现在使用的方法是检查从DB读取的数组的大小。只要在其上执行其他操作,这样的背负就可以了。但是,我想知道是否有更直接的方法来查询现有的联系人数量。
我在C#编码,但JS也是要了解,以防万一。
QueryExpression query = new QueryExpression
{
EntityName = "contact",
ColumnSet = new ColumnSet(true),
};
EntityCollection response = organizationService.RetrieveMultiple(query);
IEnumerable<Entity> entities = response.Entities;
答案 0 :(得分:10)
以下是您的选择:
以下是检索Count:
所需的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 Site明确声明只有Fetch XML支持Grouping / Aggregate函数 - &gt; http://msdn.microsoft.com/en-us/library/gg334607.aspx
答案 1 :(得分:4)
您可以在响应上使用 TotalRecordCount 。
Console.WriteLine("Total number of records: " + response.TotalRecordCount);
答案 2 :(得分:1)
您可以使用计数聚合执行FetchXML。
答案 3 :(得分:-1)
我假设您正在从数据库中执行某种select语句,并查看返回的DataTable对象以查看它有多少行。
尝试做
SELECT COUNT(*) FROM [TableName] WHERE [condition]
这将返回一个与行数相同的数字。