我正在尝试获取与订单相关的订单产品的数量。 这是我的代码:
//count the number of lines in the actual order
QueryExpression query = new QueryExpression("salesorderdetail");
query.ColumnSet.AddColumns("salesorderid");
query.Criteria = new FilterExpression();
query.Criteria.AddCondition("salesorderid", ConditionOperator.Equal, order.Id);
EntityCollection response = service.RetrieveMultiple(query);
由于某些原因,当我使用response.TotalRecordCount时,我有-1作为计数,即使有一些记录。 我猜-1与问题有关,表达式有什么不对吗?
答案 0 :(得分:1)
您可以/应该使用FetchXML来执行查询,因为您减少了从CRM发送到本地计算机的数据量。这是一个示例fetch语句,可以执行您想要的操作
<fetch mapping="logical" aggregate='true'>
<entity name="salesorderdetail">
<attribute name="salesorderid" aggregate="countcolumn" alias='test'/>
<filter>
<condition attribute="salesorderid" operator="eq" value="e076c06a-6609-4aca-b0f4-a5075997378b" />
</filter>
</entity>
答案 1 :(得分:0)
我为IOrganizationService编写了一个扩展方法。
这样称呼它:
Console.WriteLine("# of Account records: {0}",
service.Count(Account.EntityLogicalName));
扩展方法:
public static int Count(this IOrganizationService service, string entityLogicalName)
{
string fetch = "<fetch distinct='true' mapping='logical' aggregate='true'>";
fetch += string.Format("<entity name='{0}'>", entityLogicalName);
fetch += "<attribute name='createdon' alias='count' aggregate='count' />";
fetch += "</entity></fetch>";
int count = -1;
try
{
var result = service.RetrieveMultiple(new FetchExpression(fetch));
count = (Int32)((AliasedValue)result.Entities.First()["count"]).Value;
}
catch { }
return count;
}
如果您将FetchXML编辑为Kevin,它应该可以正常工作 FetchXML只能计数到50000。