LINQ中的Include方法用于左连接?

时间:2015-04-29 00:48:16

标签: c# linq entity-framework dotconnect

我正在使用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  



如果我总是可以使用“包含”方法进行左连接,我有疑问。这种方法对我来说并不清楚。

1 个答案:

答案 0 :(得分:1)

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

你拥有的第二个选项不是纯粹的LINQ。 Include是EF特定的扩展方法,在其他提供程序中不可用。

因此,如果您想要与其他数据库提供程序一起使用的常见LINQ,请使用选项1.如果您想要更简单的语法并且可以使用EF特定选项2可能会更好。