浅谈 IEnumerable 与 IQueryable 的区别

原文地址:https://www.jeremyjone.com/856/,转载请注明。


开始之前

在写数据操作时,经常会与这两个接口打交道,它们有着几乎相同的方法,使用起来基本无二,甚至通过 As 方法可以相互转换。那么它们之间到底有什么区别,今天就聊聊这两个接口。

为了更好的理解,我们尝试使用如下语句进行理解:

IEnumerable<Project> projects1 = Db.Where(x => x.Id == projectId);
IQueryable<Project> projects2 = Db.Where(x => x.Id == projectId);

IEnumerable

IEnumerablelinq to object 的方式,它需要将所有原始匹配的对象加载到内存后,再进行查询。

那么 projects1 在查询时仅仅执行数据库中的原始查询,将 Db 的所有数据都加载到内存中,然后通过 Where 过滤掉不需要的数据。

使用 IEnumerable 会大量消耗内存,虽然我们一般理解内存处理数据很快,但是相比于 sql 来说,它慢的一批。

IQueryable

IQueryable 则是 linq to sql 的方式,它会将所有查询整合为一整条 sql,这得益于强大的表达式树。

所以 projects2 仅仅是从数据库中查询符合条件的数据,效率明显要比 IEnumerable 要高。

印证

为了印证它们的不同,我们可以分别看一下两者的 Where 方法的参数:

// IQueryable
Where<TSource>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值