IQueryable到底意味着什么?

4 c# entity-framework iqueryable

我不确定我明白到底IQueryable是什么.

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

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

Ric*_*ard 15

一个IQueryable实际上不是实体的集合,而是介绍如何获取该集合.在您评估数据之前,不会从源中检索数据,只需将数据转换为IEnumerable类似数据.

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

  • 您最好也讲述一下返回 IQueryable 的危险。您确实不想将生成查询的控制权移交给其他层。尤其是如果您要使用 OData 公开它的话。 (2认同)

Ric*_*res 5

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

IQueryable■当一个"终端"方法号召他们仅评价,等,ToList(),ToArray(),Single(),SingleOrDefault(),First(),FirstOrDefault(),Count(),Any(),等,这是在提供者尽皆时并执行翻译.Microsoft包含一个LINQ提供程序,它不对任何内容进行转换,但在内存中运行.这是通过调用扩展方法将a IEnumerable<T>转换为an 时使用的.IQueryable<T>AsQueryable()