Я пишу веб-сервис .NET, который принимает документы из базы данных cosmosDB.Я пишу функцию в другом проекте (который должен быть настолько универсальным, насколько это возможно) для извлечения документа, чтобы WS использовал его.
Я использую DocumentClients
function CreateDocumentQuery
вот так:
public static async Task<T1> GetMyDocumentAsync<T1>(eDataBase databaseName, eCollection collectionName, eFields key, string val)
{
var option = new FeedOptions { EnableCrossPartitionQuery = true };
Uri uri = UriFactory.CreateDocumentCollectionUri(databaseName.ToString(), collectionName.ToString());
IQueryable<T1> res = Client.CreateDocumentQuery<T1>(uri, option);
document = res.AsEnumerable<T1>().FirstOrDefault();
}
Это отлично работает, возвращая первый документ в базе данных.Но при изменении использования CreateDocumentQuery
на это:
IQueryable<T1> res = Client.CreateDocumentQuery<T1>(uri, "SELECT * FROM c",option);
И, заключенный в блок try-catch, выдается исключение, которое имеет InnerException
, в котором говорится:
Objectне установлен для экземпляра объекта.
Также некоторые поля исключений:
Data = {System.Collections.ListDictionaryInternal}
и
Error = {{ "code": "BadRequest",
"message": "\r\nActivityId: SOMEGUID" }}
Запрос работает на этомколлекция с портала Azure.
Используемые мной свойства клиента:
ConnectionMode = Шлюз и Протокол = Https .
Есть идеи, почему это использование работает, а другое, использующее явную строку запроса, не будет?Я также пытался использовать объект SqlQuerySpec
, и результат был таким же.Я не хочу использовать функцию Where()
, так как я хочу использовать универсальные типы.Ключевое слово async предназначено для будущего использования.