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