我正在尝试从cosmosdb集合中选择"docType" : "offer"
,其中公司ID与用户公司ID相匹配。
示例CosmosDB文档
{
"id": "507f1f77bcf86cd799439011",
"company": [
{
"id": "D4B7B6CA-116C-452C-AEC7-58999567CD8Z",
"name": "A"
},
{
"id": "D4B7B6CA-116C-452C-AEC7-58999567CD8C",
"name": "B"
}
],
"docType": "offer"
}
查询:这是我当前的查询,但它不能作为无效的&&
使用
与bool
和IEnumerable
var queryOffers = from doc in _client.CreateDocumentQuery<Offer>(collectionUri, DefaultOptions)
where doc.docType == "offer" && doc.Companies.Any(i => i.id == user.company.companyId)
select doc;
请注意,我的cosmosdb使用的是SQL API。
答案 0 :(得分:0)
var queryOffers = _client.CreateDocumentQuery<Offer>(collectionUri, DefaultOptions)
.Where(doc => doc.docType == "offer")
.AsEnumerable()
.Where(c => c.Company.Any(i => i.id == id));
答案 1 :(得分:0)
我遇到了类似的问题,我需要在现有Lambda表达式内使用嵌套的Any()/Contains()
。我实际上必须添加一个额外的冗余字段才能进行查询,因为这种方式不支持Any()/Contains()
。
您自己看看:Use Linq.Any() inside a Linq.Where() on CosmosDb
对于您的情况,您将需要另外List
个companyIds
,然后才能将Any()
嵌套在where()
内