使用QueryExpression查询特定的记录集

时间:2019-07-12 12:17:13

标签: c# dynamics-crm microsoft-dynamics query-expressions

有没有一种方法可以生成只返回特定记录集的QueryExpression?

我具有以下条件类型:

第一:
返回前n条记录(即,选择顶部)

最后:
返回最后n条记录

每个:
返回第n条记录

对于“ First”类型,我可以使用

queryExpression.TopCount = number_of_records

但是我不知道如何达到其他类型的标准。问题是数据量很大,如果我首先需要获取所有记录并使用Linq查询结果以自定义结果集,那么我可能会遇到性能问题。

如果我可以构建QueryExpression,只需选择我所需要的东西,整个事情就会变得更有效率。

有人对如何通过QueryExpression实现这一点有想法吗?

有问题的系统是Microsoft Dynamics CRM Online

2 个答案:

答案 0 :(得分:2)

对于“后N个”,您可以颠倒排序并再次使用TopCount

对于“每N个”,您可能需要考虑paging查询表达式。

假设您要查找第10条记录。我可能要做的是将页面大小设置为10(query.PageInfo.Count)。

要尽快遍历页面,我将使“ main”查询仅返回GUID。当我检索一个新的GUID页面时,我抓住了第一个GUID,并使用单独的Retrieve调用获取了该记录所需的列。

答案 1 :(得分:2)

最后N条记录:按特定字段排序的顺序非常简单,然后是前N条 返回最后n条记录

// Instantiate QueryExpression QEaccount
var QEaccount = new QueryExpression("account");
QEaccount.TopCount = 5;

// Add columns to QEaccount.ColumnSet
QEaccount.ColumnSet.AddColumns("name", "ah_account_type", "accountid");
QEaccount.AddOrder("name", OrderType.Descending);

每n条记录:

您在这里是否有任何特定条件,例如,给我所有国家/地区为德国的帐户 如果是,那么您可以根据用户条件返回特定的记录集,如下所示:

// Define Condition Values
var QEaccount_address1_country = "Germany";

// Instantiate QueryExpression QEaccount
var QEaccount = new QueryExpression("account");

// Add columns to QEaccount.ColumnSet
QEaccount.ColumnSet.AddColumns("name", "ah_account_type", "accountid", "address1_country");

// Define filter QEaccount.Criteria
QEaccount.Criteria.AddCondition("address1_country", ConditionOperator.Equal, QEaccount_address1_country);