【发布时间】:2020-08-16 04:57:18
【问题描述】:
您好,我想在 cosmos DB 的数据库中获取容器的所有项目。我可以看到已经有很多方法可用,但我没有看到任何 getAllItems 或类似的方法。
有没有像使用 LINQ 之类的简单方法?
谢谢
【问题讨论】:
标签: linq .net-core azure-cosmosdb azure-cosmosdb-sqlapi
您好,我想在 cosmos DB 的数据库中获取容器的所有项目。我可以看到已经有很多方法可用,但我没有看到任何 getAllItems 或类似的方法。
有没有像使用 LINQ 之类的简单方法?
谢谢
【问题讨论】:
标签: linq .net-core azure-cosmosdb azure-cosmosdb-sqlapi
如果您想使用 Linq 执行此操作,可以执行以下操作(如此答案中所建议:How can I use LINQ in CosmosDB SDK v3.0 async query?):
var db = Client.GetDatabase(databaseId);
var container = db.GetContainer(containerId);
var q = container.GetItemLinqQueryable<Person>();
var iterator = q.ToFeedIterator();
var results = await iterator.ReadNextAsync();
如果您想要非 Linq 解决方案,请使用此解决方案(取自 v3 SDK 示例:https://github.com/Azure/azure-cosmos-dotnet-v3/blob/master/Microsoft.Azure.Cosmos.Samples/Usage/ItemManagement/Program.cs#L259:
QueryDefinition query = new QueryDefinition(
"select * from sales s where s.AccountNumber = @AccountInput ")
.WithParameter("@AccountInput", "Account1");
FeedIterator<SalesOrder> resultSet = container.GetItemQueryIterator<SalesOrder>(
query,
requestOptions: new QueryRequestOptions()
{
PartitionKey = new PartitionKey("Account1"),
MaxItemCount = 1
});
while (resultSet.HasMoreResults)
{
FeedResponse<SalesOrder> response = await resultSet.ReadNextAsync();
// Work through iterator list here
}
希望这会有所帮助!
【讨论】:
您可以使用Microsoft Azures documentation 中描述的 LINQ。
这样的事情应该可以解决您的问题:
var db = Client.GetDatabase(databaseId);
var container = db.GetContainer(containerId);
//Get iterator or use some LINQ queries here
var iterator = container.GetItemLinqQueryable<YourType>().GetEnumerator();
【讨论】: