我在尝试查询Cosmos DocumentDB时遇到意外错误。我已经在Azure数据资源管理器中运行了查询,但是得到了预期的结果,但是,当我尝试使用C#SQL API运行它时,却遇到了各种错误(经过不同的尝试),包括“算术运算中的上溢或下溢”或“ NullReferenceException”。当我使用ReadDocumentAsync时,我得到的文档没有错误,所以我知道我的cosmos客户端和集合uri都可以。
有人可以帮助我理解为什么我对此有疑问吗
这是我构建和执行查询的方式:
using (var cosmosClient = new DocumentClient(new Uri(cosmosEndPointUrl), cosmosAuthKey))
{
var collectionUri = UriFactory.CreateDocumentCollectionUri(databaseId, collectionId);
var sql = @"SELECT TOP 10 p.Id As QuoteKey
,pol.Proposer.Forename
,pol.Proposer.Surname
,pol.Proposer.ResidentialAddress.Postcode
,veh.Vrn
FROM Proposal p
JOIN pol IN p.QuoteRequest.Policies
JOIN veh IN pol.Vehicles
WHERE(pol.Proposer.Forename = @Forename OR @Forename = '')
AND(pol.Proposer.Surname = @Surname OR @Surname = '')
AND(pol.Proposer.ResidentialAddress.Postcode = @Postcode OR @Postcode = '')
AND(veh.Vrn = @Vrn OR @Vrn = '')";
var ps = new SqlParameterCollection(new SqlParameter[]
{
new SqlParameter { Name = "@Forename", Value = criteria.Firstname },
new SqlParameter { Name = "@Surname", Value = criteria.Surname },
new SqlParameter { Name = "@Postcode", Value = criteria.Postcode },
new SqlParameter { Name = "@Vrn", Value = criteria.RegNo },
});
var sqlQuerySpec = new SqlQuerySpec(sql, ps);
var fo = new FeedOptions { MaxItemCount = 10 };
List<QuoteSummary> results = new List<QuoteSummary>();
var query = cosmosClient.CreateDocumentQuery(collectionUri, sqlQuerySpec, fo).AsDocumentQuery();
while (query.HasMoreResults)
{
var demiResults = await query.ExecuteNextAsync<QuoteSummary>();
results.AddRange(demiResults);
}
return results.ToList();
}
以下是另外两个使用的类:
public class QuoteSummary
{
public string QuoteKey { get; set; }
public string Forename { get; set; }
public string Surname { get; set; }
public string Postcode { get; set; }
public string Vrn { get; set; }
}
public class QuoteSearchCriteria
{
public string Firstname { get; set; }
public string Surname { get; set; }
public string Postcode { get; set; }
public string RegNo { get; set; }
}
请帮助。在我正在参加Microsoft的Hack时,这个问题正在困扰着我,到目前为止,我没有人问过为什么它不起作用。
答案 0 :(得分:0)
当我遇到此异常时,它与环境和相关性有关:
我的配置是Azure App服务,该服务查询azure cosmosdb。
我所缺少的是Web API级别的Nuget package。显然,它作为其他类库中的依赖项存在,但已被引用,但没有在运行中的顶级应用程序(本例中为Web API)中直接引用。