我有一个类似下面的查询,我正在尝试参数化:
List<string> poiIDs = /*List of poi ids*/;
List<string> parameterNames = /*List of parameter names*/;
string inClause = string.Join(",", parameterNames);
string query = string.Format("SELECT c.id AS poiID, c.poiName, c.latitude, c.longitude FROM c WHERE c.clusterName = @clusterName AND c.id IN ({0}) AND c.deleted = false", inClause);
IQueryable<POI> queryResult = Client.CreateDocumentQuery<POI>(Collection.SelfLink, new SqlQuerySpec
{
QueryText = query,
Parameters = new SqlParameterCollection()
{
new SqlParameter("@clusterName", "POI"),
// How do I declare the dynamically generated parameters here
// as new SqlParameter()?
}
});
如何为SqlQuerySpec的Parameters属性声明动态生成的参数作为新的SqlParameter()以创建我的文档查询?
答案 0 :(得分:1)
您可以像这样创建动态参数化查询:
export
答案 1 :(得分:0)
DocumentDB SDK不支持参数化IN
查询。
从上面评论中的SO thread来看,SQL也没有。如其他线程中所述,您可以使用LINQ作为解决方法。
答案 2 :(得分:0)
以下为您提供SQL查询,然后您可以在DocumentDB Collection中运行,以通过其ID获取文档。
var query = $"SELECT * FROM p WHERE p.id IN ('{string.Join("', '", arrayOfIds)}')";
答案 3 :(得分:0)
为什么不使用ArrayContains方法?这是节点中的一个例子
sqlQuery = {
query: 'SELECT * FROM t WHERE ARRAY_CONTAINS(@idList, t.id)',
parameters: [
{
name: '@idList',
value: ['id1','id2','id3'],
},
],
};