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 可能会更好。
我正在使用 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 可能会更好。