这可能是一个非常重要的问题,但是当编写跨越三个级别(或更多)的查询时,包含多个子实体的好方法是什么?
即我有4个表:Company,Employee,Employee_Car和Employee_Country
公司与员工有1:m的关系.
Employee与Employee_Car和Employee_Country都有1:m的关系.
如果我想编写一个返回所有4个表中数据的查询,我目前正在编写:
Company company = context.Companies
.Include("Employee.Employee_Car")
.Include("Employee.Employee_Country")
.FirstOrDefault(c => c.Id == companyID);
Run Code Online (Sandbox Code Playgroud)
必须有一个更优雅的方式!这是冗长的,并产生可怕的SQL
我在VS 2010中使用EF4
这是对另一个问题的答案部分中的这个问题的回应.
我有一个Orders集合,每个Order订购OrderItems的集合,每个OrderItem都有一个PartId.使用LINQ如何实现以下SQL语句:
1)选择具有特定零件ID的所有订单
SELECT *
FROM Order
WHERE Id in (SELECT OrderId FROM OrderItems WHERE PartId = 100)
Run Code Online (Sandbox Code Playgroud)
2)选择Order.OrderNumber和OrderItem.PartName
SELECT Order.OrderNumber, OrderItem.PartName
FROM Order INNER JOIN OrderItem ON Order.Id = OrderItem.OrderId
WHERE OrderItem.partId = 100
Run Code Online (Sandbox Code Playgroud)
3)选择Order.OrderNumber和整个OrderItem细节:
SELECT Order.OrderNumber, OrderItem.*
FROM Order INNER JOIN OrderItem ON Order.Id = OrderItem.OrderId
WHERE OrderItem.partId = 100
Run Code Online (Sandbox Code Playgroud)