从CosmosDB WHERE返回文档列表以过滤嵌套数据

时间:2018-10-29 23:28:13

标签: c# azure-cosmosdb azure-cosmosdb-sqlapi

我正在尝试从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"
}

查询:这是我当前的查询,但它不能作为无效的&&使用 与boolIEnumerable

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。

2 个答案:

答案 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

对于您的情况,您将需要另外ListcompanyIds,然后才能将Any()嵌套在where()