LINQ中的include方法用于Left Join?

Include method in LINQ is used for Left Join?

我正在使用 Entity Framework 6,DotConnect for Oracle,我有这两个查询:

第一个,使用简单连接(LINQ 和输出 SQL):

LINQ:

var joinQuery = Db.Products  
    .Join(Db.Product_Categories.AsEnumerable(), p => p.ProductID, 
        pc => pc.CategoryID, (pc, p) => new { pc, p })
    .ToList();

输出SQL:

SELECT * FROM Products

其次,使用Include:

LINQ:

var includeQuery = Db.Products.Include("Product_Categories").ToList();

输出SQL:

SELECT * FROM Products 
    LEFT OUTER JOIN Product_Categories 
        ON Products.CategoryID = Product_Categories.CategoryID  



我怀疑我是否总是可以使用 "Include" 方法进行左连接。这个方法我的不清楚。

在第一个示例中,连接的末尾不应有 .AsEnumerable()。通过这样做,您导致 EF 从 Product_Categories 获取所有记录,然后在内存中进行连接,这可能非常低效,因为它不使用任何类型的索引。

您的第二个选项不是纯 LINQ。 Include 是一种特定于 EF 的扩展方法,在其他提供程序中不可用。

因此,如果您想要通用的 LINQ,您可以与其他 DB 提供程序一起使用,请选择选项 1。如果您想要更简单的语法并且接受 EF 特定的选项 2 可能会更好。