DocumentDB SQL查询工作在查询资源管理器,但不是在c#代码

本文关键字:查询 代码 资源管理器 SQL 工作 DocumentDB | 更新日期: 2023-09-27 18:06:13

我想获得存储在文档中的变量(InputAssetId)的值作为字符串。编写查询。它在QueryExplorer中运行良好。

 this.client = new DocumentClient(new Uri(EndpointUri), PrimaryKey);
 IQueryable<asset> id = this.client.CreateDocumentQuery<asset>(
               UriFactory.CreateDocumentCollectionUri(DatabaseName,CollectionName),
               "SELECT c.InputAssetId FROM c WHERE c.BlobNameDb='BigBuckBunny.mp4' ");
 Console.WriteLine( id.string());

不是存储在变量中的值,我在控制台中得到的值在

下面给出
{"query":"SELECT c.InputAssetId FROM c WHERE c.BlobNameDb='BigBuckBunny.mp4' "}
谁能给我一个解决方案?

DocumentDB SQL查询工作在查询资源管理器,但不是在c#代码

问题是您实际上并没有执行您创建的查询。正确的代码应该是这样的:

this.client = new DocumentClient(new Uri(EndpointUri), PrimaryKey);
var query = this.client.CreateDocumentQuery<asset>(
         ... your LiNQ or SQL query...
    .AsDocumentQuery();
var result = await query.ExecuteNextAsync<string>();
Console.WriteLine(result.ToList().FirstOrDefault());

你可能想在查询中使用TOP 1(而不是FeedOptions)。MaxItemCount = 1,因为后者的命名很糟糕——它实际上表示每个提要请求最多返回多少项。使用较低的MaxItemCount会导致大量无用的查询)。

好吧,我仍然不太了解所有的API,但我会使用Linq与c#。"。

你应该或多或少这样写:

FeedOptions queryOptions = new FeedOptions { MaxItemCount = 1 };
IQueryable<Asset> assetQuery = client.CreateDocumentQuery<Asset>(UriFactory.CreateDocumentCollectionUri(DatabaseName, CollectionName),

queryOptions).Where(o => o. blobnamedb == "BigBuckBunny.mp4");

string id = assetQuery.First().InputAssetId ;

从我可以在文档中读到你想要使用SQL查询,你必须通过它作为SqlQuerySpec,所以你的代码可以成为(还没有测试的解决方案虽然):

IQueryable<string> assetQuery = client.CreateDocumentQuery<Asset>(
          UriFactory.CreateDocumentCollectionUri(DatabaseName, CollectionName), 
          new SqlQuerySpec("SELECT c.InputAssetId FROM c WHERE c.BlobNameDb='BigBuckBunny.mp4'"),
          queryOptions)
string id = assetQuery.First();