3

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

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

林克:

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

二、使用包括:

林克:

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

输出 SQL:

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



我怀疑我是否总是可以对左连接使用“包含”方法。这种方法对我来说不是很清楚。

4

1 回答 1

1

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

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

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

于 2015-04-29T07:37:00.360 回答