【问题标题】:Effects of IEnumerable and IQueryable on Relational Database and Non-Relational DatabaseIEnumerable 和 IQueryable 对关系型数据库和非关系型数据库的影响
【发布时间】:2022-11-10 19:37:21
【问题描述】:
我最近开始学习Linq,所以我遇到了IQueryable 和 IEnumerable.我已经了解区别以及在哪里使用什么。但我有点怀疑 IEnumerable 和 IQueryable 在所有数据库中是否具有相同的效果假设我们有PostgreSQL 和 MongoDB会不会有同样的效果PostgreSql 一个关系数据库和 MongoDb 一个非关系数据库数据库?有人可以帮我吗?任何额外的信息表示赞赏。提前致谢。
【问题讨论】:
标签:
linq
ienumerable
iqueryable
【解决方案1】:
允许您对 SQL 和 NO-SQL 数据库使用 LINQ 表达式的 .NET 驱动程序有其局限性。
例如,在 mongo 最受欢迎的 c# 驱动程序网站 (MongoDB C# Driver) 中,我们建议使用分析器来告诉我们哪些 LINQ 表达式有效或无效:
但是,在回答您的另一个问题时,这仅对 IQueryable 接口有效,因为它是您的 LINQ 表达式将被转换为 Mongo 查询的两个接口中唯一的一个。对于 IEnumerable 接口,您始终是安全的,因为只有从数据库中获取数据后,查询才会在内存中进行。
请记住,IQueryable 和 IEnumerable 都支持延迟执行。不同之处在于,使用 IEnumerable 当您实例化列表 (.ToList) 时,您将查询数据库,然后才应用您的过滤器(在内存中)。当您实例化 IQueryable 时,它会在数据库查询本身中“应用”您的过滤器(这就是为什么它更快并且在处理数据库时通常被推荐 - 您可能会从数据库中获取更少的数据)。
在这里很好地描述了 IQueryable 和 IEnumerable 之间的区别:Returning IEnumerable vs. IQueryable