【问题标题】:MS Dynamics - QueryExpression with ConditionOperator.In result in no result but works with ConditionOperator.EqualMS Dynamics - 使用 ConditionOperator.In 的 QueryExpression 没有结果,但可以使用 ConditionOperator.Equal
【发布时间】:2019-06-26 15:57:44
【问题描述】:

我正在尝试进行查询以检索包含字符串列表中文本之一的所有记录。

    QueryExpression query = new QueryExpression("account")
                {
                    ColumnSet = new ColumnSet("primarycontactid", "new_text"),
                    NoLock = true,
                    Criteria =
                    {
                        Conditions =
                        {
                            new ConditionExpression()
                            {
                                AttributeName = "new_text",
                                Operator = ConditionOperator.In,
                                Values = { texts.ToArray() }
                            }
                        }
                    }
                };

此代码执行没有问题,但不返回任何记录。

我也试过下面的代码,导致返回多条记录。

    QueryExpression query = new QueryExpression("account")
                {
                    ColumnSet = new ColumnSet("primarycontactid", "new_text"),
                    NoLock = true,
                    Criteria =
                    {
                        Conditions =
                        {
                            new ConditionExpression()
                            {
                                AttributeName = "new_text",
                                Operator = ConditionOperator.Equal,
                                Values = { texts.ToArray()[0] }
                            }
                        }
                    }
                };

我也试过了,没有错误,但没有返回。

    QueryExpression query = new QueryExpression("account")
                {
                    ColumnSet = new ColumnSet("primarycontactid", "new_text"),
                    NoLock = true,
                    Criteria =
                    {
                        Conditions =
                        {
                            new ConditionExpression()
                            {
                                AttributeName = "new_text",
                                Operator = ConditionOperator.Equal,
                                Values = { texts.ToArray() }
                            }
                        }
                    }
                };

如何使用值列表进行查询?

【问题讨论】:

  • 这是故意的“NoLock = false”吗??
  • 部分地,我将其更改为 true,但没有更新问题。

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


【解决方案1】:

下面的语法应该可以工作。

QueryExpression q = new QueryExpression("account");
q.Criteria.AddCondition("new_text", ConditionOperator.In, new object[] { "value1", "value2" });

替代版本:

q.Criteria.AddCondition("new_text", ConditionOperator.In, "value1", "value2");

Read more

【讨论】:

  • 我有一个问题只是为了我的理解,文本字段是否支持 In 运算符?我认为这就是为什么 op 的 equal 起作用但 In 运算符不起作用。
  • @AnkUser 是的,它应该可以工作,我在 XrmToolBox 中测试了 fetchxml - 仅从那里得到了 QE 转换
  • 啊,完美。感谢您的信息。
【解决方案2】:

这是另一种方法。

将您的文本作为列表,然后将其转换为逗号分隔的字符串并在您的条件下使用此字符串

IList texts = new List{"1","2","testing"}; string joined = string.Join(",", texts);

那么你可以像下面这样使用它

QueryExpression query = new QueryExpression("account") { ColumnSet = new ColumnSet("primarycontactid", "new_text"), NoLock = false, Criteria = { Conditions = { new ConditionExpression() { AttributeName = "new_text", Operator = ConditionOperator.In, Values = { joined } } } } };

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-15
    • 2018-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多