使用参数化查询在.NET中查询DocumentDb

时间:2016-04-27 09:17:06

标签: azure azure-cosmosdb

对于应用程序,我在.NET上的DocumentDb上运行查询。对于这个使用,我想使用参数化查询,如下所示:

var sqlString = "select p.Id, p.ActionType, p.Type, p.Region, a.TimeStamp, a.Action from History p join a in p.Actions where a.TimeStamp >= @StartTime and a.TimeStamp <= @EndTime and p.ClientId = @ClientId and p.ActionType = @ActionType";
if (actionType != "") { sqlString += actionTypeFilter; }

var queryObject = new SqlQuerySpec
{
   QueryText = sqlString,
   Parameters = new SqlParameterCollection()
   {
      new SqlParameter("@StartTime", startDate),
      new SqlParameter("@EndTime", endDate),
      new SqlParameter("@ClientId", clientId.ToString()),
      new SqlParameter("@ActionType", actionType)
   },
};

var dataListing =  _documentDbClient.CreateDocumentQuery<PnrTransaction>(UriToPnrHistories, queryObject, new FeedOptions() { MaxItemCount = 1 });

当我执行此操作时,我将获得空数据集。但是,当我使用相同的查询,并使用经典的字符串替换来构建它时,它的工作正常。

有谁可以告诉我在参数化查询中我做错了什么?

2 个答案:

答案 0 :(得分:0)

如果上面的代码是正在运行的代码,您仍然会在参数化的SQL字符串上添加actiontypeFilter。尝试删除第2行的if语句。对我来说可能是你的问题。

如果您可以从服务器发布示例文档,将会有所帮助。

答案 1 :(得分:0)

我通常会看到这种语法:

SqlParameterCollection parameters = new SqlParameterCollection();
parameters.Add(...);
parameters.Add(...);

试试看看你是否得到不同的结果。可能是您在答案中用于初始化它的列表需要以不同方式键入才能工作。