在Azure函数的DocumentDB属性中发送SqlQuery

在Azure函数的DocumentDB属性中发送SqlQuery,azure,azure-cosmosdb,azure-functions,Azure,Azure Cosmosdb,Azure Functions,我有一个Azure函数,它使用DocumentDB属性连接到Cosmos DB。我正在使用Visual Studio 2017的Azure函数工具。这是一个简单的函数 [FunctionName("DocumentDbGet")] public static HttpResponseMessage Run([HttpTrigger(AuthorizationLevel.Function, "get")]HttpRequestMessage req, TraceWriter log

我有一个Azure函数,它使用DocumentDB属性连接到Cosmos DB。我正在使用Visual Studio 2017的Azure函数工具。这是一个简单的函数

    [FunctionName("DocumentDbGet")]
    public static HttpResponseMessage Run([HttpTrigger(AuthorizationLevel.Function, "get")]HttpRequestMessage req, TraceWriter log,
        [DocumentDB("FunctionJunctionDemo", "Demo")]IEnumerable<DemoModel> items)
    {
        //Can perform operations on the "items" variable, which will be the result of the table/collection you specify
        string name = req.GetQueryNameValuePairs()
            .FirstOrDefault(q => string.Compare(q.Key, "name", true) == 0)
            .Value;

        var item = items.Where(x => x.FirstName == name);
        return req.CreateResponse(HttpStatusCode.OK);
    }
我只见过一个这样做的例子,并报告说它应该是有效的。 我收到的错误是,它没有将任何名为SqlQuery的内容识别为可能的参数

我已经看过Azure函数输入绑定的文档 它在function.json文件中显示包含sqlQuery属性的输出。那是怎么进去的

如果无法在DocumentDB属性中传入SqlQuery,那么最好的做法是预先过滤结果,以避免返回整个集合,然后通过LINQ查询运行它?

您需要参考Microsoft.Azure.WebJobs.Extensions.DocumentDB NuGet package或更高版本的1.1.0-beta版本

在该版本中,SqlQuery是DocumentDB属性的有效参数。如果在选择字符串之前删除$sign,您的代码将为我编译:


您不需要$-它用于C中的字符串插值,而不是您想在这里执行的操作。

Hi@Mikhail-谢谢您的快速回答!因此,即使我删除了从一开始就肯定不需要的$,它仍然不承认它是有效的。也许我的版本不匹配?我使用的是Microsoft.Azure.WebJobs.Extensions.DocumentDB的v1.0.0,这就是DocumentDB属性的所在。也许我需要更新Azure CLI?因此我将Azure Functions CLI更新为最新版本,并将Visual Studio 2017预览版更新为Preview 7,从而允许我将Visual Studio的Azure Function tools从0.2更新为0.3.30802。这些都没有帮助。在我的机器上的SqlQuery下仍然可以看到令人敬畏的红色曲线。也许我完全丢失了一个包?@EricFleming我引用的是1.1.0-beta1版本的…Extensions.DocumentDB包。这能改变吗?啊哈@米哈伊尔,就是这样。我没有在NuGet包管理器中选中Include prerelease复选框。检查后,我看到了…Extensions.DocumentDB包的1.1.0-beta1。现在,它似乎接受SqlQuery作为参数。您是否可以编辑上面的答案,以包括我们至少需要在该软件包的1.1.0-beta版上才能使用SqlQuery参数?
    [FunctionName("DocumentDbGet")]
    public static HttpResponseMessage Run([HttpTrigger(AuthorizationLevel.Function, "get")]HttpRequestMessage req, TraceWriter log,
        [DocumentDB("FunctionJunctionDemo", "Demo", SqlQuery = $"select * from c where c.Id = {Id}")]IEnumerable<DemoModel> items)
    {
        //Can perform operations on the "items" variable, which will be the result of the table/collection you specify
        string name = req.GetQueryNameValuePairs()
            .FirstOrDefault(q => string.Compare(q.Key, "name", true) == 0)
            .Value;

        var item = items.Where(x => x.FirstName == name);
        return req.CreateResponse(HttpStatusCode.OK);
    }
[DocumentDB("FunctionJunctionDemo", "Demo", SqlQuery = "select * from c where c.Id = {Id}")]