Получение ошибки при получении данных из метода Select в DataTable с помощью оператора «Мне нравится» - PullRequest
1 голос
/ 06 января 2012

Я использую следующий код

foreach (KeyValuePair<string, string> kvp in letGrdSignList)
                {
                    //Check if added function in definition is modified, if yes then don't add it in signature list
                    DataRow[] dLetRow = dtLet.Select("Definition" + "Like"" + "'" +
                        "%"+ kvp.Value + "%" + "'");
                   //kvp.value contains  "local:try2values($arg1 as xs:decimal,$arg2 as xs:float*)"     
                   //Above line results in error

                   if (dLetRow.Length > 0)
                    {
                        //Check if signature already exists
                        if (!strList.ContainsKey(kvp.Key))
                            strList.Add(kvp.Key, kvp.Value);
                    }
                    //else
                    //    //Remove from list if signature is not present in any defination column
                    //    letGrdSignList.Remove(sLetSignature);ss
                }


I am getting following error
{System.Data.EvaluateException: Error in Like operator: the string pattern '%local:try2values($arg1 as xs:decimal,$arg2 as xs:float*)%' is invalid.
   at System.Data.LikeNode.AnalyzePattern(String pat)
   at System.Data.LikeNode.Eval(DataRow row, DataRowVersion version)
   at System.Data.Select.AcceptRecord(Int32 record)
   at System.Data.Select.GetLinearFilteredRows(Range range)
   at System.Data.Select.SelectRows()
   at System.Data.DataTable.Select(String filterExpression)
   at WPFApp.QueryGenerator.GetSignatureList()

скриншот кода

из MSDN, если нашел это Подстановочные знаки

И символы *, и% можно использовать взаимозаменяемо для подстановочных знаков в сравнении LIKE. Если строка в предложении LIKE содержит * или%, эти символы должны быть заключены в квадратные скобки ([]). Если в предложении есть скобки, каждый символ скобки должен быть заключен в скобки (например, [[] или []]). Подстановочный знак допускается в начале и конце шаблона, или в конце шаблона, или в начале шаблона. Например:

"ItemName LIKE ' product '"

"ItemName LIKE '* product'"

"ItemName LIKE 'product *'"

Символы подстановки не допускаются в середине строки. Например, 'te * xt' не допускается.

Ответы [ 2 ]

2 голосов
/ 06 января 2012

Вы должны экранировать "%" при использовании оператора Like

//Check if added function in definition is modified, if yes then don't add it in signature list
    DataRow[] dLetRow = dtLet.
       Select("Definition Like '[%]%" + kvp.Value + "[%]%'");
0 голосов
/ 06 января 2012

Я заменил строку этой

 DataRow[] dLetRow = dtLet.Select("Definition" + "Like"" + "'" +
                        "%"+ kvp.Value.replace("*","[*]") + "%" + "'");

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...