我正在编写一个从 cosmosDB 数据库中获取文档的 .NET Web 服务。我在另一个项目中编写了一个函数(应该尽可能通用)来检索文档,以便 WS 使用它。
我正在使用这样的DocumentClients
功能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
状态:
对象未设置为对象的实例。
还有一些异常字段是:
Data = {System.Collections.ListDictionaryInternal}
和
Error = {{ "code": "BadRequest",
"message": "\r\nActivityId: SOMEGUID" }}
该查询适用于来自 azure 门户的该集合。
我正在使用的客户端属性是:
ConnectionMode =网关和协议 = Https。
关于为什么这种用法有效而另一种使用显式查询字符串的任何想法都不会?我也尝试使用一个SqlQuerySpec
对象,结果是一样的。我不想使用该Where()
函数,因为我想使用泛型类型。async 关键字是为了将来使用。