如何解决CosmosDB文档客户端-如何隐式添加查询类型?
我在.NET Core 3.1中将DocumentClient用于Azure Cosmos DB。我的示例查询是:
var results = await _cosmosClient
.CreateDocumentQuery<Employee>(_documentCollectionUri,FeedOptionsprovider.DefaultOptions<Employee>())
.Where(x => x.IdentityId == identityId)
.AsDocumentQuery()
.GetResponse();
这段代码非常有问题,因为如果数据库中存在另一个具有传递条件的文档,但是具有另一种类型,则响应将包含该对象。我知道lambda表达式仅限于泛型类型的公共属性,但是是否有可能隐式添加检查类型的正确性?数据库对象具有“ discriminator”之类的属性,其中包含实体类型,但是在lambda表达式中不可见。我想要的行为是此“ discriminator”属性的检查条件,而对象模型中没有此属性。该怎么做?
谢谢您的帮助!
解决方法
您可以使用以下使用QueryDefinition
类和container.GetItemQueryIterator
方法的方法:
/// <summary>
/// Run a query (using Azure Cosmos DB SQL syntax) against the container
/// </summary>
private async Task QueryItemsAsync()
{
var sqlQueryText = "SELECT * FROM c WHERE c.Discriminator = 'Value' AND c.IdentityId = 'Id'";
Console.WriteLine("Running query: {0}\n",sqlQueryText);
QueryDefinition queryDefinition = new QueryDefinition(sqlQueryText);
FeedIterator<Family> queryResultSetIterator = this.container.GetItemQueryIterator<Family>(queryDefinition);
List<Family> families = new List<Family>();
while (queryResultSetIterator.HasMoreResults)
{
FeedResponse<Family> currentResultSet = await queryResultSetIterator.ReadNextAsync();
foreach (Family family in currentResultSet)
{
families.Add(family);
Console.WriteLine("\tRead {0}\n",family);
}
}
}
在这里,您可以直接添加要根据Discriminator
字段进行过滤的查询。
有关实施的更多详细信息,您可以访问:Tutorial: Build a .NET console app to manage data in Azure Cosmos DB SQL API account
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。