代码之家  ›  专栏  ›  技术社区  ›  Adam

从CosmosDB返回要在其中筛选嵌套数据的文档列表

  •  0
  • Adam  · 技术社区  · 7 年前

    "docType" : "offer" 从我的cosmosdb集合中,公司ID与用户的公司ID匹配。

    {
        "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;
    

    2 回复  |  直到 7 年前
        1
  •  0
  •   Adam    7 年前
            var queryOffers = _client.CreateDocumentQuery<Offer>(collectionUri, DefaultOptions)
                .Where(doc => doc.docType == "offer")
                .AsEnumerable()
                .Where(c => c.Company.Any(i => i.id == id));
    
        2
  •  0
  •   bit    7 年前

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

    Use Linq.Any() inside a Linq.Where() on CosmosDb

    对于你的情况,你需要一个额外的 List 属于 companyIds 然后你就可以筑巢了 Any() 内部 where()