在sql查询中加载和包含有什么区别

时间:2016-11-07 10:53:34

标签: c# entity-framework linq-to-sql

我有一个看起来像这样的查询

         var query = db.Customer
            .Include(c => c.Address)
            .Where(c => c.Address.Id > 10)
            .ToList();

当我这样做时

        var query = db.Customer
            .Where(c => c.Address.Id > 10)
            .ToList();

        db.Address
            .Where(a => a.Id > 10)
            .Load();

据我所知,我得到的结果相同。

我的问题是:这两个查询返回的内容之间是否存在差异,而另一个查询优先于另一个?

1 个答案:

答案 0 :(得分:0)

var query = db.Customer
                .Include(c => c.Address)
                .Where(c => c.Address.Id > 10)
                .ToList();

在上面的查询中,它使用单个数据库行程带来所有相关数据。

 var query = db.Customer
                .Where(c => c.Address.Id > 10)
                .ToList();

            db.Address
                .Where(a => a.Id > 10)
                .Load();

这里使用2次数据库访问来获取数据。

Load :

  

您可能希望从中加载实体   数据库进入上下文而不立即做任何事情   那些实体。一个很好的例子是加载数据实体   如本地数据中所述的绑定。一种常见的方法是   编写一个LINQ查询,然后在其上调用ToList,只是立即调用   丢弃创建的列表。 Load扩展方法就像   ToList除了它完全避免创建列表。

注意:我们不能说哪一个更好。我们大多数时候都使用预先加载方法(Include)。这很好又简单。但有时它很慢。所以您需要根据数据大小等决定使用哪一个