在使用Lambda或者LINQ表达式的时候经常会把返回的List<>或者一个Iquery<>对象在不恰当的时候进行内存加载,在不知道原理的情况下可能有时候我们会得到想要查询的表结构,有时候又会获取失败,那么这个到底是为什么?
这是以为EF中存在一个延迟加载的问题,这个问题存在于List<>与Iquery<>中,有时候我们不知道应该使用哪种去实现表结构的接受,下面我们就来谈谈这两种类型的区别。
如果在宏观上将,不对IList<>的ToList()进行技巧性使用的话,那么显然IQuerable自己就实现了延迟加载。
但是,如果我仍然要使用IList<>来实现延迟加载呢?那么也不是没有办法,只要在写完了实体关联的条件和全部做完了查询结构之后,我们再.ToList(),也是可以实现这个延迟加载的。
其实,所谓的延迟加载,就是我们什么时候去查询数据库,从而确定表结构或者实体关系返回给程序员使用,在IList<>中,只有用到了.ToList(),才回去查询数据库。在IQuerable中只有全部遍历之后才回去查询数据库,然后返回相关实体联系。所以这两种方法都可以实现延迟加载,具体怎么使用还是看各位自己的习惯了。