带有IN语句的DocumentDB SP

时间:2017-04-11 21:50:33

标签: c# azure-cosmosdb nosql

我的DocumentDB SP

function getSetOfProductDetails(productIds) {
    var collection = getContext().getCollection();

    var isAccepted = collection.queryDocuments(
        collection.getSelfLink(),
        "SELECT * FROM product WHERE product.productId IN ("+ productIds +")" ,
        function (err, feed, options) {
            if (err) throw err;

            // Check the feed and if empty, set the body to 'no docs found', 
            // else take 1st element from feed
            if (feed) getContext().getResponse().setBody(feed);
        });

    if (!isAccepted) throw new Error('The query was not accepted by the server.');
}

我的C#代码:

string productIdList = "'271762','288738','235521','266714'";
 List<Product> productList = new List<Product>();
 try
 {
     productList = await  DocumentDBRepository<List<Product>>.ExecuteStoredProc("product","getSetOfProductDetails", productIdList );
}

DocumentDBRepository代码:

public static async Task<T> ExecuteStoredProc(string collectionId, string storedProcedureId, params object[] parameter)
        {
            ConnectToDatabase();
            StoredProcedureResponse<T> document = await _documentClient.ExecuteStoredProcedureAsync<T>(UriFactory.CreateStoredProcedureUri(_databaseId, collectionId, storedProcedureId), parameter);
            return (T)(dynamic)document;
        }

我在productList收到的结果集是空白的,而Collection中有文档。这是实施IN的{​​{1}}语句的正确方法吗?

1 个答案:

答案 0 :(得分:0)

如果SELECT * FROM product WHERE product.productId IN ("+ productIds +")可以获得应该与您的代码一起使用的正确值。我测试你的代码,它在我身边正常工作。

enter image description here

正如您所说,文件正在收集中,请尝试以下列方式进行操作:

1.确保SQL可以获得预期的结果。字段区分大小写。在我的产品模型中,我使用字段ProductId,所以在我的情况下,我使用 product.ProductId 而非 product.productId 进行查询。我使用Azure门户

查询它

enter image description here

2.从Azure门户

执行存储过程

enter image description here

如果两者都有效,请再试一次代码。