EntityFramework IEnumerable,IQueryable ,Include

 使用IQueryable

       using (var db = new CentaStaffEntities())
            {
                IQueryable<Staff> queryablestaffs = db.Staff.AsQueryable().OrderBy(p=>p.StaffID).Skip(3).Take(3);
                foreach (var item in queryablestaffs)
                {
                    Console.WriteLine(item.CnName);
                }  
            }

 

 

使用IEnumerable

            using (var db = new CentaStaffEntities())
            {  
                IEnumerable<Staff> enumerablestaffs = db.Staff.AsEnumerable().OrderBy(p => p.StaffID).Skip(3).Take(3);
                foreach (var item in enumerablestaffs)
                {
                    Console.WriteLine(item.CnName);
                }
            }

 

IQueryable接口与IEnumberable接口的区别:  IEnumerable<T> 泛型类在调用自己的SKip 和 Take 等扩展方法之前数据就已经加载在本地内存里了,而IQueryable<T> 是将Skip ,take 这些方法表达式翻译成T-SQL语句之后再向SQL服务器发送命令,它并不是把所有数据都加载到内存里来才进行条件过滤。

参考:http://www.cnblogs.com/ambon/articles/4766924.html

 

Include(),两表必须含有外键关系,只需要指定键名对应的类属性名即可,不需指定结果字段(即全部映射)。默认搜索某表时,不会顺带查询外键表,直到真正使用时才会再读取数据库查询;若是使用 Include(),则会在读取本表时把指定的外键表信息也读出来。

复制代码
 using (var db = new TestEntities())
            {
                IEnumerable<Student> enumerablestaffs = db.Student;
                foreach (var item in enumerablestaffs)
                {
                    //每次都会获取
                    Console.WriteLine(item.Class.Name);
                }
            }
复制代码

 

 

Include

复制代码
            using (var db = new TestEntities())
            {
                //预加载关联表  前提必须有主外键关系
                IEnumerable<Student> enumerablestaffs = db.Student.Include("Class");
                //只查询一次
                foreach (var item in enumerablestaffs)
                {
                    Console.WriteLine(item.Class.Name);
                }
            }
复制代码

Left join

 

posted @   释迦苦僧  阅读(1518)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
点击右上角即可分享
微信分享提示