我正在使用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
如果我总是可以使用“包含”方法进行左连接,我有疑问。这种方法对我来说并不清楚。
答案 0 :(得分:1)
在第一个示例中,连接不应该在其末尾具有.AsEnumerable()。通过这样做,你导致EF去从Product_Categories获取所有记录,然后在内存中进行连接,这可能是非常低效的,因为它没有使用任何类型的索引。
你拥有的第二个选项不是纯粹的LINQ。 Include是EF特定的扩展方法,在其他提供程序中不可用。
因此,如果您想要与其他数据库提供程序一起使用的常见LINQ,请使用选项1.如果您想要更简单的语法并且可以使用EF特定选项2可能会更好。