Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在CosmosDB SDK v3.0同步计数查询中使用LINQ时,如何查询布尔值?_C#_.net_Linq_Azure Cosmosdb - Fatal编程技术网

C# 在CosmosDB SDK v3.0同步计数查询中使用LINQ时,如何查询布尔值?

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 =>

我使用一个同步模式来计算CosmosDB中保存的项目,指定一个谓词并使用GetItemLinqQueryable

这非常有效,使用特定字段值计算所有
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;