DocumentQueryException:查询表达式无效 [英] DocumentQueryException: Query expression is invalid
问题描述
我需要查询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屋!