首页 文章

DocumentQueryException:查询表达式无效

提问于
浏览
2

我需要在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();
        }

但是,在尝试使用此 endpoints 时,我收到此错误

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 回答

  • 3

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

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

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

相关问题