Microsoft.Azure.Cosmos 3.38.1中Max/Min函数及SQL查询失效问题
Cosmos DB 3.38.1中Max/Min函数及SQL查询失效问题
我无论如何尝试,都无法在Microsoft.Azure.Cosmos 3.38.1版本中让Max()、MaxAsync()或直接SQL查询生效。
在Cosmos DB Emulator中执行以下SQL语句:
SELECT MAX(f.preisEuro) AS maxWert, MIN(f.preisEuro) AS minWert FROM fahrzeuge f
可以得到预期结果:
[ { "maxWert": 5000000, "minWert": 1273 } ]
但以下两段C#代码均无法正常工作:
第一段代码(直接SQL查询):
var query = new QueryDefinition( "SELECT max(f.preisEuro) as maxWert, min(f.preisEuro) as minWert FROM fahrzeuge f"); using var setIterator = container.GetItemQueryIterator<dynamic>( query ,requestOptions: new QueryRequestOptions() { // PartitionKey = new PartitionKey(MagicValues.PartionKeyValue), MaxConcurrency = 1, // MaxItemCount = 1, } ); var results = new List<dynamic>(); while (setIterator.HasMoreResults) { var response = await setIterator.ReadNextAsync(); Console.WriteLine($"Response: {response.StatusCode}"); results.AddRange(response); }
第二段代码(Linq MinAsync):
var minPreis = await container.GetItemLinqQueryable<Fahrzeug>() .Select(f => f.PreisEuro).MinAsync();
我尝试过修改SQL中变量名和min()/max()关键字的大小写,但返回结果均为空JSON对象,或MinAsync()、MaxAsync()返回0。我知道可以读取整个容器后循环计算最值,但Microsoft.Azure.Cosmos.Linq.CosmosLinqExtensions中提供了MinAsync()、MaxAsync()函数,理应可以直接使用。
更新/解决方案
根本问题是我使用了错误的容器名称。Cosmos不会抛出错误,只会在使用Min/Max时返回0,或执行SQL语句时返回空结果。
内容的提问来源于stack exchange,提问作者Jan
相关产品推荐
相关产品推荐

