我希望将文件中存储的变量(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' "}
任何人都可以给我一个解决方案吗?
答案 0 :(得分:1)
问题是您实际上并没有执行您创建的查询。正确的代码将是这样的:
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,因为后者命名错误 - 它实际上意味着最多返回每个Feed请求的项目数。使用低MaxItemCount可能会导致大量无用的查询。)
答案 1 :(得分:0)
好吧,我仍然不了解所有API,但我会将Linq与C#一起使用。 `。
你应该用这种方式写或多或少:
FeedOptions queryOptions = new FeedOptions { MaxItemCount = 1 };
IQueryable<Asset> assetQuery = client.CreateDocumentQuery<Asset>(UriFactory.CreateDocumentCollectionUri(DatabaseName, CollectionName),
queryOptions) .Where(o =&gt; o.BlobNameDb ==&#34; BigBuckBunny.mp4&#34;);
string id = assetQuery.First().InputAssetId ;
从我在documentation中您想要使用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();