IQueryable到底是什么意思

本文关键字:意思 是什么 IQueryable | 更新日期: 2023-09-27 18:35:33

我不确定我是否理解IQueryable到底是什么。

我知道它不会让我获得所有实体并将约束部分放在内存中,而是将其作为发送到数据库的命令的一部分执行。

如果我弄错了,请纠正我并告诉我,为什么我的存储库函数应该返回IQueryable而不是简单的List

IQueryable到底是什么意思

IQueryable实际上不是实体的集合,而是描述如何获取该集合。在通过将其转换为IEnumerable或类似内容对其进行评估之前,永远不会从源检索数据。

从存储库返回IQueryable的优点是,调用代码可以在查询进入数据库之前指定其他.Where子句。如果返回IEnumerable,则代码将从数据库中检索一个表的所有值,然后在内存中执行筛选,这是低效的。

IQueryable 和 IQueryable<T> 是封装 LINQ 表达式的抽象;然后,LINQ 提供程序使用这些表达式(如实体框架使用的表达式)将这些表达式转换为 SQL,而 SQL 又将发送到数据库。不同的LINQ提供程序以不同的方式解释LINQ表达式,例如,MongoDB将这些表达式转换为JSON查询。

只有当调用

"终端"方法时,IQueryable才会被计算,例如ToList()ToArray()Single()SingleOrDefault()First()FirstOrDefault()Count()Any()等。这是提供商快速进入并进行翻译的时候。Microsoft包括一个 LINQ 提供程序,该提供程序不执行任何内容的转换,而是在内存中运行。这是当您通过调用扩展方法AsQueryable()IEnumerable<T>转换为IQueryable<T>时使用的。