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
生活不易,五行缺金,求打点