linq IEnumerable和IQueryable对关系数据库和非关系数据库的影响

deikduxw  于 2022-12-15  发布在  其他
关注(0)|答案(1)|浏览(176)

我最近才开始学Linq,所以我遇到了IQueryable和IEnumerable。我已经理解了它们的区别,以及在哪里使用它们。但是我有一个小小的疑问,IEnumerable和IQueryable在所有数据库中是否都有相同的效果,比如说我们有PostgreSQL和MongoDB它在**PostgreSQL关系数据库和MongoDb非关系数据库中是否有相同的效果?有谁能帮我一下吗?任何额外的信息都是感激的。提前感谢。

5lhxktic

5lhxktic1#

允许您针对SQL和NO-SQL数据库使用LINQ表达式的.NET驱动程序有其局限性。
例如,在mongo最流行的c#网站驱动程序(MongoDB C# Driver)中,我们被推荐使用分析器来告诉我们哪些LINQ表达式是有效的或无效的:

然而,回答你的另一个问题,这只对IQueryable接口有效,因为它是两个接口中唯一一个LINQ表达式将被转换成Mongo查询的接口。对于IEnumerable接口,你总是安全的,因为只有当数据从数据库中取出时,查询才会在内存中发生。
请记住,IQueryable和IEnumerable都支持延迟执行。不同之处在于,使用IEnumerable示例化列表时(.ToList),您将查询数据库,然后才应用筛选器示例化IQueryable时,它将在数据库查询本身中“应用”筛选器(这就是为什么它更快,并且通常推荐在处理数据库时使用-您从DB中获取的数据可能更少)。
IQueryable和IEnumerable之间的区别在这里有很好的描述:Returning IEnumerable vs. IQueryable

相关问题