Azure cosmosdb 如何在Azure Cosmos DB SQL API中使用SQL参数进行包含查询?

Azure cosmosdb 如何在Azure Cosmos DB SQL API中使用SQL参数进行包含查询?,azure-cosmosdb,azure-cosmosdb-sqlapi,Azure Cosmosdb,Azure Cosmosdb Sqlapi,我有以下sql变量: SELECT * FROM x WHERE x.Description CONTAINS(@p1) 我已配置了一个名为@p1的SQL参数和一个有效字符串,即foo,并使用以下命令将其添加到SqlParameterCollection集合变量中: var sqlQuery = new SqlQuerySpec(sql, collection); 然后调用以下查询 var query = _documentClient.CreateDocumentQuery<T&g

我有以下sql变量:

SELECT * FROM x WHERE  x.Description CONTAINS(@p1)
我已配置了一个名为@p1的SQL参数和一个有效字符串,即foo,并使用以下命令将其添加到SqlParameterCollection集合变量中:

var sqlQuery = new SqlQuerySpec(sql, collection);
然后调用以下查询

var query = _documentClient.CreateDocumentQuery<T>(GetDocumentCollectionUri<T>(graphRequestContext), sqlQuery, options).AsDocumentQuery();
我得到以下错误:

消息:Microsoft.Azure.Documents.DocumentClientException:消息:{错误:[{严重性:错误,位置:{开始:37,结束:45},代码:SC1001,消息:语法错误,“包含”附近的语法不正确。}]} ActivityId:,Microsoft.Azure.Documents.Common/2.2.0.0,Windows/10.0.17763 documentdb netcore sdk/2.2.2

根据文档,它似乎在寻找字符串表达式。因此,如果事实确实如此,我希望对此进行确认。

似乎您使用了错误语法的CONTAINS。请了解一下

请参考下面的代码,它为我工作

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Azure.Documents;
using Microsoft.Azure.Documents.Client;
using System;

namespace DocumentDB.TestClass
{
    class CreateBySqlParam
    {
        private static readonly string endpointUrl = "https://***.documents.azure.com:443/";
        private static readonly string authorizationKey = "***";
        private static readonly string databaseId = "db";
        private static readonly string collectionId = "***";

        private static DocumentClient client;

        public static async void QueryTest()

        {
            client = new DocumentClient(new Uri(endpointUrl), authorizationKey);
            var uri = UriFactory.CreateDocumentCollectionUri(databaseId, collectionId);

            IQueryable<Pojo> queryable = client.CreateDocumentQuery<Pojo>(
                                                uri,
                                                new SqlQuerySpec
                                                {
                                                    QueryText = "SELECT c.id,c.name FROM c WHERE contains(c.name,@param)",
                                                    Parameters = new SqlParameterCollection()
                                                    {
                                                        new SqlParameter("@param", "n")
                                                    }

                                                }
            );

            foreach (Pojo p in queryable)
            {
                Console.WriteLine("\nRead {0}", p);
            }
        }
    }

    class Pojo : Document
    {
        public string id { get; set; }
        public string name { get; set; }
    }

}
输出: