我需要在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 回答
作为Cosmonaut's ReadMe page states,您应该使用Cosmonaut的
Async
方法扩展,因为它们将通过SDK的异步流程正常运行 .例如,在您的情况下,您应该将代码更改为
await tenantStore.Query().Where(x => x.Active == true).FirstOrDefaultAsync();
PS:您还应该考虑将
[JsonAttribute("id")]
属性添加到Id
属性中 . 即使不需要,也建议特别是如果要根据Id
进行查询 .