您好,我遇到问题,希望有人能解释一下我的答案!
所以在我的数据库中,我有3个表连接如下:
Customer CustomerAddress Address
-CustomerID -CustomerID -AddressID
-FirstName -AddressID -Street
-LastName -City
所以我创建了我的实体模型,并删除了中间表(CustomerAddress)并替换为导航属性?
所以我要做的是使用C#中的LINQ查询连接表。 在SQl中,查询看起来像这样:
Select *
From dbo.customer as c
left join dbo.customeraddress as ca on c.customerID = ca.customerID
left Join dbo.Address as a on a.addressID = ca.addressID
我意识到这不是这里的情况,因为没有customeraddress表。我是否使用导航属性列进行连接?在我的模型图中,我注意到Customer类/表中有一个名为Addresses的导航属性,它似乎映射到名为Customers的Address类/表属性。
所以我试过这个:
var customerQuery = (from customer in db.Customers
join address in db.Addresses on customer.Addresses equals address.Customers into add
from rt2 in add.DefaultIfEmpty()
select new { //.. });
但这显然是不正确的,因为我不确定如何处理导航属性以加入它们。如果有人能向我解释我如何加入这个模型,我真的很感激!
答案 0 :(得分:1)
当你有导航属性时,你只需在你的查询中使用它们,就像它们是对象时那样 - 没有必要使用连接,EF会为你生成它们。
例如,您的查询将是这样的:
var customerQuery = (from customer in db.Customers
from address in customer.Addresses.DefaultIfEmpty()
select new { //.. });
这将为您生成left outer join
。如果您需要inner join
,请删除DefaultIfEmpty()
。