MS Dynamics - выражение QueryExpression с ConditionOperator.In не дает результата, но работает с ConditionOperator.Equal - PullRequest
0 голосов
/ 26 июня 2019

Я пытаюсь сделать запрос, чтобы получить все записи, содержащие один текст в списке строк.

    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() }
                            }
                        }
                    }
                };

Как я могу сделать для запроса со списком значений?

Ответы [ 2 ]

2 голосов
/ 27 июня 2019

Следующий синтаксис должен работать.

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

Подробнее

1 голос
/ 27 июня 2019

Вот еще один подход.

Создайте текст в виде списка, затем преобразуйте его в строку, разделенную запятыми, и используйте эту строку в ваших условиях

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 } } } } };
...