IQueryable到底是什么意思
本文关键字:意思 是什么 IQueryable | 更新日期: 2023-09-27 18:35:33
我不确定我是否理解IQueryable
到底是什么。
我知道它不会让我获得所有实体并将约束部分放在内存中,而是将其作为发送到数据库的命令的一部分执行。
如果我弄错了,请纠正我并告诉我,为什么我的存储库函数应该返回IQueryable
而不是简单的List
?
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>
时使用的。