有人可以用以下示例解释Linq中的查询重塑吗?

时间:2010-08-20 03:24:35

标签: linq ado.net

我正在阅读这个asp.net article来构建你的第一个asp.net mvc 2网站,我遇到了一个在查询中使用Include方法的Linq查询。我已经使用了一些linq,但我从未使用过Include方法,想要更好的解释。它转换为linq中的连接吗?有什么好处?以下是文章中的查询:

var genreModel = storeDB.Genres
                        .Include("Albums")
                        .Single(g => g.Name == genre);

文章指出:

  

实体框架功能,允许我们指定我们想要加载的其他相关实体,称为查询结果整形。我们想要为匹配的类型加载专辑,因此我们将从Genres.Include(“专辑”)进行查询,以表明我们也想要相关的专辑。这样效率更高,因为它将在单个数据库请求中检索我们的类型和专辑数据。

我有点理解作者上面所说的内容,但觉得我需要一个更好的例子或解释,特别是因为我以前从未使用过Include方法。

1 个答案:

答案 0 :(得分:2)

如果检查生成的sql,您会注意到Albums表已加入。它应该类似于:

SELECT [t0].*, [t1].*
FROM Genres [t0]
LEFT JOIN Albums [t1] ON [t0].GenreId = [t1].GenreId
WHERE [t0].Name == @p0

当结果返回到客户端时,ObjectContext会将行列形状转换为类型和专辑的实例。这些实例将按层次结构相关 - 单个类型及其所有相册。

假设此类型有5张专辑。该查询将返回5行。对象上下文将创建一个Genre实例(5行中的每一行都具有相同的Genre主键值)。