【发布时间】:2017-02-02 13:40:20
【问题描述】:
我需要在一个查询中加入 5 个表。其中 3 个表必须有关系,但其中两个可以选择连接到一个条目。
正因为如此,我正在尝试像这样对LEFT JOIN 到Table4 和Table5 做一个:
var cDesc = (cDesc == null ? "" : cDesc);
var cStreet = (cStreet == null ? "" : cStreet);
var q = await (from t1 in MyContext.Table1
join t2 in MyContext.Table2
on t1.ID equals t2.ObjectID
join t3 in MyContext.Table3
on t2.TeamID equals t3.TeamID
join t4 in MyContext.Table4
on t1.ID equals t4.ObjectID
into join3
from j3 in join3.DefaultIfEmpty()
join t5 in MyContext.Table5
on j3.StorageID equals t5.StorageID
where t2.ObjectType.Equals(16)
&& t3.UserID.Equals(userID)
&& t1.Description.Contains(cDesc)
&& l.Address.Contains(cStreet)
orderby t1.ID descending
select new Table1ListModel
{
ID = t1.ID,
Description = t1.Description,
Address = t5.Address
}
)
.Take(takeThis)
.ToListAsync();
但是这个查询只适用于与Table4 有连接的行,所以我显然做错了。
我的加入是否正确?还是我想在来自第五张表的地址上运行where 的问题?
【问题讨论】:
-
如果所有联接都基于外键关系,您会发现使用 EF 提供的导航属性会比使用联接更方便coding.abel.nu/2012/06/dont-use-linqs-join-navigate
标签: c# entity-framework linq join