azure - 使用 Linq 的 Select 查询 DocumentDB 的属性列表

标签 azure azure-cosmosdb nosql

使用 Azure 的 DocumentDb 和 .NET API,我有以下方法,非常适合检索整个文档的列表:

   public async Task<IEnumerable<T>> GetItemsAsync<T>(Expression<Func<T, bool>> predicate)
    {            
        IDocumentQuery<T> query = _Client.CreateDocumentQuery<T>(
            UriFactory.CreateDocumentCollectionUri(_DatabaseId, _Collection),
            new FeedOptions { MaxItemCount = -1 })
            .Where(predicate)
            .AsDocumentQuery();

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

        return results;
    }

现在,我并不总是想返回整个文档(特别是考虑到 DocumentDb RU 定价模型),所以我认为我应该能够添加一个 .Select 投影,如下所示:

 public async Task<List<TResult>> GetItemsAsync<T, TResult>(Expression<Func<T, bool>> predicate, Expression<Func<T, TResult>> select)
        {
            IDocumentQuery<TResult> query = _Client.CreateDocumentQuery<T>(
                UriFactory.CreateDocumentCollectionUri(_DatabaseId, _Collection),
                new FeedOptions { MaxItemCount = -1 })
                .Where(predicate)
                .Select(select)
                .AsDocumentQuery();

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

            return results;
        }

用法:

var rez = await _docs.GetItemsAsync<ApolloAssetDoc, Guid?>(x => x.MyVal == 5, x => x.ID);

但是第二种方法总是返回0结果。显然我找错了树。

知道为选择多个属性的查询返回动态对象列表的正确方法是什么(例如“SELECT d.id, d.MyVal FROM Items d WHERE d.DocType=0” )或仅选择单个属性的简单列表(例如“SELECT d.id FROM Items d WHERE d.DocType=0”)?

最佳答案

如果实体类中的 ID 属性没有 [JsonProperty(PropertyName = "id")],我可以重现该问题。如果没有包含,请尝试使用以下代码:

public class ApolloAssetDoc
    {
        [JsonProperty(PropertyName = "id")]
        public Guid ID { get; set; }
        public string MyVal { get; set; }

    }

注意:该字段区分大小写

关于azure - 使用 Linq 的 Select 查询 DocumentDB 的属性列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45317825/

相关文章:

azure - 如何在 Azure Cosmos DB 中深度搜索 JSON?

azure - 无法使用 Azure 上托管的 .NET SDK 连接到文档数据库 : The input authorization token can't serve the request

azure - 如何正确使用 CosmosDb 处理大于 2 Mb 的文档

java - 用于日志记录的最佳 NoSQL 解决方案

c# - 如何停止Azure Durable函数上的并行执行?

azure - 在 Office 365 统一 API "Get All Groups"上获取 Authorization_RequestDenied (403)

Azure Cosmos 数据库别名列排序依据

ruby-on-rails - 查询 Mongoid 哈希字段

azure - az cli 命令可以在出现 http 错误 429 时自动重试吗

azure - 多个订阅的所有资源的标签,PowerShell 输出为 csv