C# 在CosmosDB SDK v3.0同步计数查询中使用LINQ时,如何查询布尔值?
我使用一个同步模式来计算CosmosDB中保存的项目,指定一个谓词并使用GetItemLinqQueryable 这非常有效,使用特定字段值计算所有C# 在CosmosDB SDK v3.0同步计数查询中使用LINQ时,如何查询布尔值?,c#,.net,linq,azure-cosmosdb,C#,.net,Linq,Azure Cosmosdb,我使用一个同步模式来计算CosmosDB中保存的项目,指定一个谓词并使用GetItemLinqQueryable 这非常有效,使用特定字段值计算所有ReportRecord项: var count = _cosmosClient.GetContainer(DATABASE_ID, CONTAINER_ID) .GetItemLinqQueryable<ReportRecord>(true) .Count(r =>
ReportRecord
项:
var count = _cosmosClient.GetContainer(DATABASE_ID, CONTAINER_ID)
.GetItemLinqQueryable<ReportRecord>(true)
.Count(r => r.Name.Equals("Smith"));
或
如果我切换到下面的asyn模式,那么我可以使用下面的模式成功地进行查询,但是为了保持一致性,我确实希望在这里使用同步模式
List<ReportRecord> results = new List<ReportRecord>();
var container = _cosmosClient.GetContainer(DATABASE_ID, CONTAINER_ID);
var query = new QueryDefinition("SELECT * FROM Reports p WHERE p.answer = true");
using (FeedIterator<ReportRecord> resultSetIterator = container.GetItemQueryIterator<ReportRecord>(query))
{
while (resultSetIterator.HasMoreResults)
{
FeedResponse<ReportRecord> response = await resultSetIterator.ReadNextAsync();
results.AddRange(response);
}
}
return results.Count;
列表结果=新列表();
var container=\u cosmosClient.GetContainer(数据库\u ID,容器\u ID);
var query=newquerydefinition(“从报告p中选择*,其中p.answer=true”);
使用(FeedIterator resultSetIterator=container.GetItemQueryIterator(查询))
{
while(resultSetTiterator.HasMoreResults)
{
FeedResponse-response=await ResultSettings.ReadNextAsync();
结果:AddRange(应答);
}
}
返回结果。计数;
我可以毫无问题地运行您的代码。它给了我正确的计数。基础值是否存储为字符串而不是bool?根据我的经验,最好避免使用LINQ,而是使用QueryDefinition
,正是因为这个原因,事情可能不会像您预期的那样工作。同样,这种操作也是创建async
的原因。我想我一定是做错了什么。请您确认您使用了相同的model ReportRecord、相同的LINQ表达式并连接到SQL API cosmos容器,好吗?@DavidG,除非我遗漏了什么,否则答案定义为bool的事实一定意味着它在数据库中存储为bool,对吗<代码>公共布尔答案{get;set;}
var count = _cosmosClient.GetContainer(DATABASE_ID, CONTAINER_ID)
.GetItemLinqQueryable<ReportRecord>(true)
.Count(r => r.Answer == true);
public class ReportRecord
{
public string Name { get; set; }
public bool Answer { get; set; }
}
List<ReportRecord> results = new List<ReportRecord>();
var container = _cosmosClient.GetContainer(DATABASE_ID, CONTAINER_ID);
var query = new QueryDefinition("SELECT * FROM Reports p WHERE p.answer = true");
using (FeedIterator<ReportRecord> resultSetIterator = container.GetItemQueryIterator<ReportRecord>(query))
{
while (resultSetIterator.HasMoreResults)
{
FeedResponse<ReportRecord> response = await resultSetIterator.ReadNextAsync();
results.AddRange(response);
}
}
return results.Count;