有没有一种方法可以生成只返回特定记录集的QueryExpression?
我具有以下条件类型:
第一:
返回前n条记录(即,选择顶部)
最后:
返回最后n条记录
每个:
返回第n条记录
对于“ First”类型,我可以使用
queryExpression.TopCount = number_of_records
但是我不知道如何达到其他类型的标准。问题是数据量很大,如果我首先需要获取所有记录并使用Linq查询结果以自定义结果集,那么我可能会遇到性能问题。
如果我可以构建QueryExpression,只需选择我所需要的东西,整个事情就会变得更有效率。
有人对如何通过QueryExpression实现这一点有想法吗?
有问题的系统是Microsoft Dynamics CRM Online
答案 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);