DocumentQueryException:查询表达式无效

时间:2018-08-07 20:22:16

标签: azure-cosmosdb

我需要查询cosmosdb中的集合。

我的实体是:

 public class Tenant
    {
        public string Id { get; set; }

        public string ClientId { get; set; }

        public string ClientSecret { get; set; }

        public string TenantDomainUrl { get; set; }

        public bool Active { get; set; }

        public string SiteCollectionTestUrl { get; set; }


        public override string ToString()
        {
            return JsonConvert.SerializeObject(this);
        }
    }

我的控制器动作是:

 [HttpGet]
        [Route("api/Tenant/GetActiveTenant")]
        public Tenant GetActiveTenant()
        {
            var tenantStore = CosmosStoreFactory.CreateForEntity<Tenant>();
            return tenantStore.Query().Where(x => x.Active == true).FirstOrDefault();
        }

但是,当尝试使用此端点时,出现此错误

  

DocumentQueryException:查询表达式无效,表达式   https://cosmosdb-app-centralus.documents.azure.com/dbs/ToDoList/colls/tenants.Where(x   =>(x.Active == True))。不支持FirstOrDefault()。支持的表达式是“ Queryable.Where”,“ Queryable.Select”和   'Queryable.SelectMany'   强调文字

我正在使用宇航员nuget包。

集合中我唯一的文档:

{
    "ClientId": "aaaaaaaa-4817-447d-9969-e81df29c813d",
    "ClientSecret": "aaaaaaaaaaaaaaaaaa/esrQib6r7FAGd0=",
    "TenantDomainUrl": "abc.onmicrosoft.com",
    "SiteCollectionTestUrl": "https://abc.sharepoint.com/sites/Site1",
    "Active": true,
    "id": "d501acc6-6b63-4f0f-9782-1473af469b56",
    "_rid": "kUZJAOPekgAEAAAAAAAAAA==",
    "_self": "dbs/kUZJAA==/colls/kUZJAOPekgA=/docs/kUZJAOPekgAEAAAAAAAAAA==/",
    "_etag": "\"00002602-0000-0000-0000-5b69fe790000\"",
    "_attachments": "attachments/",
    "_ts": 1533673081
}

1 个答案:

答案 0 :(得分:3)

Cosmonaut's ReadMe page states一样,您应该为Cosmonaut使用Async方法扩展,因为它们可以通过SDK的异步流程正常运行。

例如,您应将代码更改为await tenantStore.Query().Where(x => x.Active == true).FirstOrDefaultAsync();

PS:您还应该考虑将[JsonAttribute("id")]属性添加到Id属性中。即使不需要,也建议特别使用,如果您想基于Id进行查询。