Почему мой параметр не подставляется? - PullRequest
0 голосов
/ 30 ноября 2018

Я использую следующий запрос для запроса CosmosDB, я не могу использовать LINQ из-за ARRAY_CONTAINS. Проблема заключается в том, что мое приложение вылетает с нулевым исключением, поскольку SQLParameter никогда не подставляется.

Запрос выглядит следующим образомэто

     var sqlStatement = new SqlQuerySpec
    {
      QueryText = "SELECT * FROM c where ARRAY_CONTAINS(c.locales[0].categories, @category)",
      Parameters = new SqlParameterCollection()
    {
       new SqlParameter{ Name = "@category", Value = "Homeware" }
    }
  };

   IDocumentQuery<JObject> query = client.CreateDocumentQuery<JObject>(
 collectionUr
 sqlStatement)
 .AsDocumentQuery();

 while (query.HasMoreResults)
{
  items.AddRange(await query.ExecuteNextAsync<JObject>());
}

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Извините, но ответ Джея неверен.Его способ на самом деле не параметризует SqlQuerySpec, но вместо этого он просто объединяет строку, которая, в свою очередь, не правильно параметризует запрос.Это то же самое, что не иметь коллекции параметров для начала.

Я только что проверил код, который вы предоставили, с тем же набором данных, который у вас есть, и это абсолютно нормально.Нулевое исключение не имеет ничего общего с вашим SqlParameterCollection.

Работает тот же код:

Используется набор данных

![]()

0 голосов
/ 30 ноября 2018

Вы можете обратиться к приведенному ниже коду, который работает для меня:

var Parameters = new SqlParameterCollection()
       {
          new SqlParameter(Name = "@category", Value = "Homeware")
       };

IQueryable<Pojo> queryable = client.CreateDocumentQuery<Pojo>(
        uri,
        new SqlQuerySpec
        {
         QueryText = "SELECT * FROM c where ARRAY_CONTAINS(c.locales[0].categories, " + Parameters[0].Value + ")" 
        });
...