【问题标题】:CRM Online RetrieveMultiple with OptionSetValueCollection conditionCRM Online RetrieveMultiple 与 OptionSetValueCollection 条件
【发布时间】:2018-08-21 07:47:45
【问题描述】:

我正在尝试从多选项集选择列表中检索包含某些选项集值的记录。

这一行使我的代码失败:

int[] values = GetValues();
query.Criteria.AddCondition(new ConditionExpression(fieldName, 
ConditionOperator.ContainValues, values);

当我用逗号分隔值时,代码可以工作:

query.Criteria.AddCondition(new ConditionExpression(fieldName, 
ConditionOperator.ContainValues, 1,2,3);

唯一的问题是这些值是动态的,所以我不能这样做。 到目前为止,我发现克服它的唯一方法是:

FilterExpression filter = new FilterExpression(LogicalOperator.Or);
foreach (int value in values)
{
    filter.AddCondition(new ConditionExpression(fieldName, 
        ConditionOperator.ContainValues, value));
}
query.Criteria.AddFilter(filter);

只是想知道是否有比这个更好的解决方案?

【问题讨论】:

  • values 作为第三个参数传递时会出现什么异常?

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


【解决方案1】:

您可以尝试使用In

Query data from multi-select picklists

对于 Web API,有等价的 ContainValuesDoesNotContainValues 查询函数。

其他可用于此类的现有条件运算符 属性包括:EqualNotEqualNotNullNullInNotIn.

【讨论】:

  • In 方法不对,也没有解决异常问题。您甚至可以在文档中看到: int[] hikeValue = new int[] { 2 }; ConditionExpression condition = new ConditionExpression("sample_outdooractivities", ConditionOperator.ContainValues, hikeValue);问题是这部分代码抛出异常...
【解决方案2】:

文档显然需要更新。方法定义采用对象数组:

public void AddCondition(string attributeName, ConditionOperator conditionOperator, params object[] values)

因此,如果您将值数组更改为:

object[] values = GetValues();

这适用于我的代码:

object[] roleValues = new object[] { (int)optionset_value };

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-27
    • 1970-01-01
    • 2018-02-07
    • 1970-01-01
    • 1970-01-01
    • 2012-01-01
    • 2017-07-09
    • 1970-01-01
    相关资源
    最近更新 更多