Entity Framework объединяет 3 таблицы
Я пытаюсь присоединиться к трем таблицам, но я не могу понять этот метод...
Я завершил соединение двух таблиц
var entryPoint = dbContext.tbl_EntryPoint
.Join(dbContext.tbl_Entry,
c => c.EID,
cm => cm.EID,
(c, cm) => new
{
UID = cm.OwnerUID,
TID = cm.TID,
EID = c.EID,
}).
Where(a => a.UID == user.UID).Take(10);
![tables]()
Я хотел бы включить таблицу tbl_Title с помощью TID PK и получить поле Заголовок.
Спасибо большое
Ответы
Ответ 1
Я думаю, что будет проще использовать синтаксический запрос:
var entryPoint = (from ep in dbContext.tbl_EntryPoint
join e in dbContext.tbl_Entry on ep.EID equals e.EID
join t in dbContext.tbl_Title on e.TID equals t.TID
where e.OwnerID == user.UID
select new {
UID = e.OwnerID,
TID = e.TID,
Title = t.Title,
EID = e.EID
}).Take(10);
И вы, вероятно, должны добавить предложение orderby
, чтобы убедиться, что Top(10)
возвращает правильные десятки элементов.
Ответ 2
Это не проверено, но я считаю, что синтаксис должен работать для лямбда-запроса. Когда вы присоединяетесь к большим таблицам с помощью этого синтаксиса, вам нужно еще больше развернуть новые объекты, чтобы достичь значений, которые вы хотите манипулировать.
var fullEntries = dbContext.tbl_EntryPoint
.Join(
dbContext.tbl_Entry,
entryPoint => entryPoint.EID,
entry => entry.EID,
(entryPoint, entry) => new { entryPoint, entry }
)
.Join(
dbContext.tbl_Title,
combinedEntry => combinedEntry.entry.TID,
title => title.TID,
(combinedEntry, title) => new
{
UID = combinedEntry.entry.OwnerUID,
TID = combinedEntry.entry.TID,
EID = combinedEntry.entryPoint.EID,
Title = title.Title
}
)
.Where(fullEntry => fullEntry.UID == user.UID)
.Take(10);
Ответ 3
var entryPoint = (from ep in dbContext.tbl_EntryPoint
join e in dbContext.tbl_Entry on ep.EID equals e.EID
join t in dbContext.tbl_Title on e.TID equals t.TID
where e.OwnerID == user.UID
select new {
UID = e.OwnerID,
TID = e.TID,
Title = t.Title,
EID = e.EID
}).Take(10);
Great answer