我需要查询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
}
答案 0 :(得分:3)
与Cosmonaut's ReadMe page states一样,您应该为Cosmonaut使用Async
方法扩展,因为它们可以通过SDK的异步流程正常运行。
例如,您应将代码更改为await tenantStore.Query().Where(x => x.Active == true).FirstOrDefaultAsync();
PS:您还应该考虑将[JsonAttribute("id")]
属性添加到Id
属性中。即使不需要,也建议特别使用,如果您想基于Id
进行查询。