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' "}
谁能给我一个解决方案?
问题是您实际上并没有执行您创建的查询。正确的代码应该是这样的:
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();