DocumentQueryException:查询表达式无效 [英] DocumentQueryException: Query expression is invalid

查看:75
本文介绍了DocumentQueryException:查询表达式无效的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要查询cosmosdb中的集合.

I need to query a collection in 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();
        }

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

However when trying to use this endpoint, I get this error

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

DocumentQueryException: Query expression is invalid, expression https://cosmosdb-app-centralus.documents.azure.com/dbs/ToDoList/colls/tenants.Where(x => (x.Active == True)).FirstOrDefault() is unsupported. Supported expressions are 'Queryable.Where', 'Queryable.Select' & 'Queryable.SelectMany' emphasized text

我正在使用宇航员nuget包.

I am using cosmonaut nuget package.

馆藏中唯一的文档:

{
    "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
}

推荐答案

作为

As Cosmonaut's ReadMe page states, you should be using the Async method extensions for Cosmonaut because they will go properly though the SDK's async flow.

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

For example in your case, you should change your code to await tenantStore.Query().Where(x => x.Active == true).FirstOrDefaultAsync();

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

PS: You should also consider adding the [JsonAttribute("id")] attribute to your Id property. Even though it's not needed, it is recommended especially if you want to do querying based on the Id.

这篇关于DocumentQueryException:查询表达式无效的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆