一直在阅读questions & answers,articles,他们都说:
通过使用IEnumberable<T>
,它将所有数据从数据库中提取到应用程序的内存中,然后在其上应用过滤器(这对于我的项目是不可接受的);而IQueryable<T>
是救星:它在数据库中进行过滤,然后仅将过滤后的数据返回到内存中。
在带有Kestrel的ASP.NET Core项目中,我可以看到如何将lambda表达式或LINQ转换为SQL命令(从Kestrel控制台),并且我尝试在代码中使用这两个命令,但是转换后的SQL查询看起来是一样的:
任何人都可以启发我如何看待差异吗?
更新
代码如下:
public IQueryable<Apartment> GetApartmentsByPostcode(string postcode, int pageIndex, int pageSize)
{
return _dataContext.Apartment
.Include(a => a.ApartmentDetails)
.Where(a => string.Compare(a.PostCode, postcode, true) == 0 && a.Enabled == true)
?.Skip((pageIndex - 1) * countPerPage)
?.Take(30);
}
我在IQueryable
和IEnumerable
之间切换(.AsEnumerable()
结尾处的Take(30)
)
我知道Take()
,Skip
,Where
等将返回IQueryable
,但是没有办法使它们从根返回IEnumerable
。
所以我可以得出结论,使用IQueryable
或IEnumerable
作为返回类型没关系吗?