今天学习了用EF模型做查询,感觉数据库上下文对象的扩展方法很强大,所以研究了一下where的实现原理,其中遇到了一个问题,就是关于IEnumerable和IQueryable的区别,所以查了查资料,这里通俗的和大家说一下
刚开始看到where方法的返回值是一个IQueryable<T>类型,所以我在自己的MyWhere方法的返回值写的也是这个类型,结果报错。然后换成了IEnumerable<T>,解决问题。
总结:首先要说的是IQueryable继承自IEnumerable接口,它是的IEnumerable更强大。IEnumerable接口是在调用自己的扩展方法之前,就已经将数据加载保存到了本地内存里,然后根据条件,从内存中筛选数据返回。IQueryable接口是将方法翻译成T-SQL语句,然后再向数据库服务器中发出命令,筛选满足条件的数据,返回给我们。
本人不才,如果有理解偏差的地方,还请各位大牛不吝赐教。
时间: 2024-10-11 07:49:12