【问题标题】:Query particular set of records with QueryExpression使用 QueryExpression 查询特定的记录集
【发布时间】:2019-07-12 12:17:13
【问题描述】:

有没有办法构建只返回一组特定记录的 QueryExpression?

我有以下标准类型:

首先:
返回前 n 条记录(即选择顶部)

最后:
返回最后 n 条记录

每个:
返回每第 n 条记录

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

queryExpression.TopCount = number_of_records

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

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

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

有问题的系统是 Microsoft Dynamics CRM Online

【问题讨论】:

  • 您能解释一下为什么要查询每 N 条记录吗?
  • 用户需要能够自定义返回数据的数量。用户可以在自定义表单中定义查询 (fetchxml)。假设这样的查询返回他 > 50k 记录。然后用户可以决定让机制只选择完整结果集的一个子集。这样他可以控制返回记录的数量,而无需更改配置为 fetchxml 的查询本身

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


【解决方案1】:

对于“最后 N”,您可以反转排序并再次使用 TopCount。

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

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

为了尽可能快地遍历页面,我会让我的“主要”查询只返回 GUID。当我检索一个新的 GUID 页面时,我会获取第一个 GUID 并使用单独的 Retrieve 调用获取我想要用于该记录的列。

【讨论】:

【解决方案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 条记录:

您在此处是否有任何特定标准,例如给我所有国家/地区 =Germany 的帐户 如果是,那么您可以使用条件返回特定的记录集,如下所示

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-14
    • 1970-01-01
    相关资源
    最近更新 更多