使用CreateDocumentQuery到Azure DocumentDB传递字段和值以查询集合

时间:2017-05-04 22:16:33

标签: c#-4.0 lambda azure-cosmosdb

假设我有一个包含许多文档的集合,并且我想查询该字段具有特定值的集合。但是,我不知道我们将在哪个字段查询。

这是我想要完成的一个例子:

文档azureDocuments = client.CreateDocumentQuery(UriFactory.CreateDocumentCollectionUri(sDatabaseName,sCollectionCollection))。其中(f => f.MyField = MyValue).AsEnumerable()。FirstOrDefault();

有没有人成功完成这项工作?

1 个答案:

答案 0 :(得分:0)

  

使用CreateDocumentQuery到Azure DocumentDB传递字段和值以查询集合

您可以尝试在用户提供的fieldnamefieldvalue上动态生成谓词库,并根据谓词进行过滤。以下示例代码供您参考。

private async Task QueryDocs(string fieldname, string value)
{
    Func<MyDoc, bool> criteria = d => d.id == d.id;

    switch (fieldname)
    {
        case "id":
            criteria = d => d.id == value;
            break;
        case "name":
            criteria = d => d.name == value;
            break;
            //other cases...
    }
    string EndpointUri = "https://mydocumentdbtest.documents.azure.com:443/";
    string PrimaryKey = "{primary key}";
    DocumentClient client;

    client = new DocumentClient(new Uri(EndpointUri), PrimaryKey);

    var query = client.CreateDocumentQuery<MyDoc>(UriFactory.CreateDocumentCollectionUri("{databaseid}", "{collectionid}")).Where(criteria);
    List<MyDoc> list = query.ToList();
}

public class MyDoc
{
    public string id { get; set; }

    public string name { get; set; }
}