C# 从c语言中的cosmos db获取给定查询字符串的数据

C# 从c语言中的cosmos db获取给定查询字符串的数据,c#,azure-cosmosdb,C#,Azure Cosmosdb,我有以下功能,可以获取整个文档: public async Task<IEnumerable<dynamic>> GetAllPreferences(string queryString) { IDocumentQuery<dynamic> query = documentClient.CreateDocumentQuery<dynamic>( UriFactory.Creat

我有以下功能,可以获取整个文档:

public async Task<IEnumerable<dynamic>> GetAllPreferences(string queryString)
        {
            IDocumentQuery<dynamic> query = documentClient.CreateDocumentQuery<dynamic>(
                UriFactory.CreateDocumentCollectionUri(collectionInfo.DatabaseName, collectionInfo.CollectionName))
                .AsDocumentQuery();

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

            return results;
        }
我只需要从每个文档中获取首选项。等效的sql查询是从collectionInfo.CollectionName中选择首选项

请建议代码编辑,并帮助我在我的情况下所需的确切查询字符串

非常感谢。请尝试以下代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Azure.Cosmos;
using Microsoft.Azure.Cosmos.Linq;

namespace SO67598286
{
    class Program
    {
        const string connectionString = "connection-string";
        const string databaseId = "database-name";
        const string containerId = "container-name";
        static async Task Main(string[] args)
        {
            CosmosClient client = new CosmosClient(connectionString);
            Container container = client.GetContainer(databaseId, containerId);
            var query = container.GetItemLinqQueryable<IDictionary<string, object>>()
                .Select(f => f["preferences"]);
            var iterator = query.ToFeedIterator();
            while (iterator.HasMoreResults)
            {
                foreach (var document in await iterator.ReadNextAsync())
                {
                    Console.WriteLine(document.ToString());
                }
            }
        }
    }
}
请注意,这段代码使用了Nuget包,我相信您使用的是较旧版本的Cosmos DB SDK


另外,有关更多详细信息,请参阅此帖子:。我只使用了这篇博文中提到的代码。

您可以使用SDK尝试此代码:

public async Task<IEnumerable<dynamic>> GetAllPreferences(string queryString)
        {
            SqlQuerySpec queryStr = new SqlQuerySpec(queryString); //"select c.preferences from c"
            FeedOptions feedOptions = new FeedOptions();
            feedOptions.EnableCrossPartitionQuery = true;

            IDocumentQuery<dynamic> query = documentClient.CreateDocumentQuery(UriFactory.CreateDocumentCollectionUri(collectionInfo.DatabaseName, collectionInfo.CollectionName), queryString, feedOptions).AsDocumentQuery();

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

            return results;
        }

我没有连接字符串,我得到了DocumentClient对象
public async Task<IEnumerable<dynamic>> GetAllPreferences(string queryString)
        {
            SqlQuerySpec queryStr = new SqlQuerySpec(queryString); //"select c.preferences from c"
            FeedOptions feedOptions = new FeedOptions();
            feedOptions.EnableCrossPartitionQuery = true;

            IDocumentQuery<dynamic> query = documentClient.CreateDocumentQuery(UriFactory.CreateDocumentCollectionUri(collectionInfo.DatabaseName, collectionInfo.CollectionName), queryString, feedOptions).AsDocumentQuery();

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

            return results;
        }