0

我正在尝试"docType" : "offer"从我的 cosmosdb 集合中进行选择,其中公司 ID 与用户公司 ID 匹配。

示例 CosmosDB 文档

{
    "id": "507f1f77bcf86cd799439011",
    "company": [
        {
            "id": "D4B7B6CA-116C-452C-AEC7-58999567CD8Z",
            "name": "A"
        },
        {
            "id": "D4B7B6CA-116C-452C-AEC7-58999567CD8C",
            "name": "B"
        }
    ],
    "docType": "offer"
}

查询:这是我当前的查询,但它不适 && 用于 withboolIEnumerable

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。

4

2 回答 2

0
        var queryOffers = _client.CreateDocumentQuery<Offer>(collectionUri, DefaultOptions)
            .Where(doc => doc.docType == "offer")
            .AsEnumerable()
            .Where(c => c.Company.Any(i => i.id == id));
于 2018-10-29T23:45:54.103 回答
0

我遇到了一个类似的问题,我需要Any()/Contains()在现有的 Lambda 表达式中使用嵌套。我实际上必须添加一个额外的冗余字段才能查询,因为Any()/Contains()不支持这种方式。

自己看一下:在 CosmosDb 上的 Linq.Where() 中使用 Linq.Any()

对于您的情况,您将需要一个额外List的,companyIds并且您将能够嵌套Any()where()

于 2018-10-31T06:53:43.907 回答