【发布时间】:2012-11-24 02:21:02
【问题描述】:
我正在尝试为一个项目学习 LINQ。但是我对 Include 方法有点困惑。它是干什么用的?以下两次初始化专辑变量有什么区别?
var album = storeDB.Albums.Include("Artist").ToList();
var album = storeDB.Albums.ToList();
【问题讨论】:
标签: c# linq-to-entities
我正在尝试为一个项目学习 LINQ。但是我对 Include 方法有点困惑。它是干什么用的?以下两次初始化专辑变量有什么区别?
var album = storeDB.Albums.Include("Artist").ToList();
var album = storeDB.Albums.ToList();
【问题讨论】:
标签: c# linq-to-entities
Include 是一种扩展方法,EF 使用它来启用实体的Eager Loading。
在第一种情况下,通过指定Include("Artist"),当您从Albums 集合中检索Album 实体时,您将指示LINQ 也检索关联的Artist 实体(通常关联是通过外键在数据库中,尽管您也可以在模型中关联)。
在第二种情况下,当获取相册时,您没有拉过任何相关实体。
请注意,从 Entity Framework 4.1 及更高版本开始,有一种使用 Include 的首选机制,它采用 lambda,因此字符串关联变为强类型,即:
var album = storeDB.Albums.Include(alb => alb.Artist).ToList();
请记住在使用 lambda 扩展时导入 System.Data.Entity。
【讨论】:
Album.Artist 将为空)。
这两个语句的用途不同,第一个是使用Eager loading,即一次加载所有属于你的实体的对象(而不是稍后再进行查询),
第二个给你结果,所以你可以把它保存在一个可枚举的迭代器中,而不是 IQueryable 对象,这是更常见的 Linq 类型
【讨论】: