我正在尝试通过启用服务器端分页来从 Cosmos DB 获取数据。我有两个选择:
使用 EF Core Azure Cosmos DB 提供程序
var query = DbContext.Order.AsQueryable();
使用 Azure Cosmos LINQ 到 SQL 转换
var query = container.GetItemLinqQueryable<Order>(allowSynchronousQueryExecution: true);
我将使用 Skip
获取数据和Take
var data = query.Skip(args.Skip).Take(args.Take).ToList();
什么是更好的解决方案?
最佳答案
Entity Framework 提供程序
Cosmos DB 提供程序将协助删除我们在使用 SDK 时必须实现的大量源代码。
该提供商将允许我们使用 Entity Framework 及其所有优势,以及用于持久性的 Cosmos DB。
EF的分页
分页是指分页检索结果,而不是一次检索全部结果;这通常是针对大型结果集完成的,其中显示的用户界面允许用户导航到结果的下一页或上一页,请参阅本文档
Pagination - EF Core | Microsoft Learn
分页 Linq to sql
Azure Cosmos DB 查询提供程序尽力将 LINQ 查询转换为 Azure Cosmos DB SQL 查询。对生成的 IQueryable 对象使用 ToString() 方法来获取从 LINQ 转换的 SQL 查询。
LINQ to SQL translation in Azure Cosmos DB | Microsoft Learn
LINQ Take() 函数将限制获取的项目数量。 Skip() 函数将忽略前 n 项。像这样的东西可能会起作用:
myDataSource.Skip(pageSize * curPage).Take(pageSize)
解决方案:
您可以使用 Cosmonaut,它支持跳接分页,以及。分页方法(pageNum,pageSize)。它通过滚动结果直到到达该页面来实现此目的,但有一些方法可以提高性能。
#有关分页和分页建议的更多信息可以在 Nick 发布的此处找到
Elfocrash/Cosmonaut: 🌐 A supercharged Azure CosmosDB .NET SDK with ORM support (github.com)
关于c# - EF Core Azure Cosmos DB 提供程序与 Cosmos LINQ to SQL 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74789458/