Мне нужно объединить 5 таблиц в запросе. 3 из этих таблиц должны иметь отношения, но два из них необязательно связаны с записью.Entity Framework/LINQ: Left join defaultifempty failed
Из-за этого, я пытаюсь сделать 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
по адресу, который поступает из пятой таблицы?
Если все стыки основаны на foriegn ключевые отношения, вы обнаружите, что использование свойств навигации, которые предоставляет EF, будет менее беспорядочным, чем использование объединений https://coding.abel.nu/2012/06/dont-use-linqs-join-navigate/ – juharr