如何搜索cosmos文档中存在的名称列表

时间:2018-06-06 09:43:41

标签: azure azure-cosmosdb

我有一个名单。我需要找到Collection中Document的FirstName或LastName属性中存在哪个名称。

我曾尝试过Linq查询来存档它,但它是通过错误(“对象引用没有设置为对象的实例。”)。

 public class UserDoc
{
   public string Id { get; set; }

   public string FirstName { get; set; }

   public string LastName { get; set; }

   public string DocumentType { get { return "userdoc"; } private set { } }
}

 List<string> Names = new List<string>() { "satya", "singh" };

 IEnumerable<UserDoc> Users = await _dBRepository.GetItemsAsync<UserDoc>
                (x => (Names.Contains(x.FirstName + " " + x.LastName))&& x.DocumentType == "userdoc");


public async Task<IEnumerable<T>> GetItemsAsync<T>(Expression<Func<T, bool>> predicate) where T : class
    {
        IDocumentQuery<T> query = _client.CreateDocumentQuery<T>(documentCollectionUri:
             UriFactory.CreateDocumentCollectionUri(databaseId: _databaseId, collectionId: _collectionId),
            feedOptions: new FeedOptions { MaxItemCount = -1, EnableCrossPartitionQuery = true })
             .Where(predicate)
             .AsDocumentQuery();

        List<T> results = new List<T>();
        while (query.HasMoreResults)
        {
            results.AddRange(await query.ExecuteNextAsync<T>());
        }

        return results;
    }

1 个答案:

答案 0 :(得分:0)

根据你的描述。您的代码应修改如下:

IEnumerable<UserDoc> Users = await _dBRepository.GetItemsAsync<UserDoc>
            (x => (Names.Contains(x.FirstName)|| Names.Contains(x.LastName))&& x.DocumentType == "userdoc");

我已经测试了代码,但它确实有效。

根据您的错误消息,我认为最可能的原因是对象_client指向Null,请检查并重试。