C# sql查询中的加载和包含有什么区别

C# sql查询中的加载和包含有什么区别,c#,entity-framework,linq-to-sql,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)

我有一个类似这样的查询

         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();
就我所见,我得到了同样的结果

我的问题是:这两个查询返回的内容是否有任何区别?一个查询是否优于另一个查询

var query = db.Customer
                .Include(c => c.Address)
                .Where(c => c.Address.Id > 10)
                .ToList();
在上面的查询中,它使用单个数据库trip将所有相关数据带到何处

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

            db.Address
                .Where(a => a.Id > 10)
                .Load();
在这里,它使用2次数据库访问来获取数据

有几种情况下,您可能希望从中加载实体 将数据库导入到上下文中,而不立即对其执行任何操作 这些实体。一个很好的例子是为数据加载实体 如本地数据中所述的绑定。一种常见的方法是 编写一个LINQ查询,然后对其调用ToList,只需立即 放弃创建的列表。负载扩展方法的工作原理与 ToList只是它完全避免了创建列表


注意:我们不能说哪一种更好。大多数情况下,我们使用的是即时加载方法(
Include
)。它很好且简单。但有时速度很慢。因此,您需要根据数据大小等来决定使用哪一种方法。

您是否尝试过搜索重复的“加载与包含”方法?有很多,例如,我做了,但显然不够好。但这种情况略有不同,因为我在加载它之前在第一个查询中使用Address,我想知道这是否会导致任何问题,或者两个方法的结果总是相同的。那么两个查询都返回完全相同的数据了吗?我的代码与此稍有不同,当我在SQL server profiler中查看时,第一个查询的读取量比第二个查询的读取量稍多,这是否表明我应该使用哪个查询?你也说过include方法是渴望加载的,加载方法也有名字吗?哪一个是最快的?