IQueryable <t> VS IEnumberable <t>如何查看翻译后的SQL命令的差异?

时间:2019-04-28 02:41:46

标签: c# .net .net-core

一直在阅读questions & answersarticles,他们都说:

通过使用IEnumberable<T>,它将所有数据从数据库中提取到应用程序的内存中,然后在其上应用过滤器(这对于我的项目是不可接受的);而IQueryable<T>是救星:它在数据库中进行过滤,然后仅将过滤后的数据返回到内存中。

在带有Kestrel的ASP.NET Core项目中,我可以看到如何将lambda表达式或LINQ转换为SQL命令(从Kestrel控制台),并且我尝试在代码中使用这两个命令,但是转换后的SQL查询看起来是一样的:

enter image description here

任何人都可以启发我如何看待差异吗?

更新

代码如下:

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);
}

我在IQueryableIEnumerable之间切换(.AsEnumerable()结尾处的Take(30)

我知道Take()SkipWhere等将返回IQueryable,但是没有办法使它们从根返回IEnumerable

所以我可以得出结论,使用IQueryableIEnumerable作为返回类型没关系吗?

0 个答案:

没有答案