C# 带有IN语句的DocumentDB SP

C# 带有IN语句的DocumentDB SP,c#,azure-cosmosdb,nosql,C#,Azure Cosmosdb,Nosql,My DocumentDB SP: 我的C代码: string productIdList = "'271762','288738','235521','266714'"; List<Product> productList = new List<Product>(); try { productList = await DocumentDBRepository<List<Product>>.ExecuteStoredProc("

My DocumentDB SP:

我的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中收到的结果集为空,而集合中有文档。这是实现DocumentDB IN语句的正确方法吗?

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

如您所述,文件正在收集中,请尝试以下方法进行故障诊断:

1.确保SQL能够得到预期的结果。字段区分大小写。在我的产品模型中,我使用了字段ProductId,因此在我的示例中,我使用Product.ProductId而不是Product.ProductId进行查询。我用Azure门户查询它

2.从Azure门户执行存储过程


如果这两种方法都有效,请再次尝试您的代码。

我猜问题在于它如何序列化productIds数组。您可以尝试JSON.stingifyproductIds,但我会首先尝试在queryDocuments调用之外构建SQL语句,并查看在构建SQL语句时它是如何设置序列化的。您只需返回已构建的SQL语句DocumentDB区分大小写-从中学到的经验教训。。。非常感谢@Tom Sun-MSFT
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;
        }