查询表达式是无效的cosmosdb

时间:2018-02-08 02:27:53

标签: c# azure azure-cosmosdb

我正在尝试使用以下查询在cosmosdb中使用groupby进行查询,

var result = client.CreateDocumentQuery<Login>(documentUri)
                  .Where(i => i.logevent == "Success" && i._ts > 1517405472 && i._ts <= 1518010272)
                  .GroupBy(t => t._ts);

它会抛出以下错误

  

DocumentQueryException:查询表达式无效,表达式   https://documents.azure.com/dbs/colls/test.Where(i =&gt; ((i.logevent ==   “成功”)AndAlso(i._ts&gt; 1517405472))AndAlso(i._ts&lt; =   1518010272)))。GroupBy(t =&gt; t._ts)不受支持。支持的   表达式是'Queryable.Where','Queryable.Select'&amp;   “Queryable.SelectMany

1 个答案:

答案 0 :(得分:4)

Cosmos DB LINQ提供程序目前不支持GroupBy。您必须使用AsEnumerable实现where子句的结果,然后使用对象上的LINQ执行Group By。

var result = client.CreateDocumentQuery<Login>(documentUri)
         .Where(i => i.logevent == "Success" && i._ts > 1517405472 && i._ts <= 1518010272)
         .AsEnumerable()
         .GroupBy(t => t._ts);

注意:您应该尽可能多地将查询谓词下推到服务器。换句话说,Where子句应该在AsEnumerable前面。