2016-09-07 1 views
0

Я хочу получить значение переменной (InputAssetId), хранящейся в документе, в виде строки. Записал запрос. Он отлично работает в QueryExplorer.DocumentDB SQL Query работает в Query Explorer, но не в коде C#

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

В чем проблема? Это похоже на действительный SQL-запрос для меня. –

+0

Что такое «актив»? И, между прочим, разве вы не должны получать «IQueryable », если вы выбираете только идентификатор? –

+0

@ShannonHolsinger Я хочу напечатать значение «InputAssetId» в консоли. Вместо того, что я получил в консоли, задано в вопросе. Это проблема. –

ответ

0

Ну, я до сих пор не знаю всех API, но я бы использовал Linq с C#. `.

Вы должны написать это более или менее таким образом:

FeedOptions queryOptions = new FeedOptions { MaxItemCount = 1 }; 

IQueryable<Asset> assetQuery = client.CreateDocumentQuery<Asset>(UriFactory.CreateDocumentCollectionUri(DatabaseName, CollectionName), 

queryOptions) .где (о => o.BlobNameDb == "BigBuckBunny.mp4");

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(); 
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, так как последний плохо назван - это на самом деле означает, сколько элементов на запросы на подачу возвращаются максимум. Использование low MaxItemCount может привести к большому количеству бесполезных запросов).