使用 QueryExpression 查询特定的记录集

Query particular set of records with QueryExpression

有没有一种方法可以构建只返回一组特定记录的 QueryExpression?

我有以下条件类型:

首先:
Returns前n条记录(即selecttop)

最后:
Returns最后n条记录

每个:
Returns 每第 n 条记录

对于类型"First"我可以使用

queryExpression.TopCount = number_of_records

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

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

有人知道如何使用 QueryExpression 实现这一点吗?

有问题的系统是 Microsoft Dynamics CRM Online

对于 "last N",您可以反转排序并再次使用 TopCount

对于 "every Nth",您可能需要考虑 paging 查询表达式。

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

为了尽可能快地遍历页面,我会让 "main" 查询 return 仅使用 GUID。当我检索新的 GUID 页面时,我将获取第一个 GUID 并使用单独的 Retrieve 调用获取该记录所需的列。

最后 N 条记录:非常简单,按特定字段排序,然后是前 N 条,就是这样 Returns 最后 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 条记录:

你在这里有什么特别的标准吗,例如给我国家=德国的所有账户 如果是,那么您可以将用户条件设置为 return 特定记录集,如下所示

// 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);