У меня есть модель Entity Framework со следующими классами (я упростил классы для упрощения просмотра):Entity Framework левое внешнее соединение не работает
PuzzleItem
-PuzzleId (int, primary key)
-Title
PuzzleProgress
-ProgressId (int, primary key)
-PuzzleId (FK)
-UserId (FK)
В PuzzleItem
У меня есть несколько уровней. PuzzleProgress
отслеживает, на каком уровне находится пользователь, вставляя запись этого уровня, когда пользователь завершает предыдущий уровень. Для начала новый пользователь будет иметь одну запись в PuzzleProgress
с PuzzleId = 1
.
В моем коде я использую следующую инструкцию для выполнения левого внешнего соединения, так что я получу список всех головоломок и укажу, какая головоломка не была решена. Я сделал ссылку на this post from StackOverflow.
Вот мой код:
var result = from pzs in e.PuzzleItems
join prg in e.PuzzleProgresses on pzs equals prg.PuzzleItem
into pzs_prg_tbl
from pzs_prg in pzs_prg_tbl.DefaultIfEmpty()
where pzs_prg.UserId == userId
select new SimplePuzzleItem()
{
PuzzleId = pzs_prg.PuzzleId,
PuzzleName = pzs_prg.PuzzleItem.Title,
IsUnlocked = (pzs_prg == null?false:true)
};
После запуска кода, только первый уровень этого нового пользователя возвращается (в то время как PuzzleItem
таблица имеет 3 записи).
Я пробовал играть с кодом, но тот, который я наклеил выше, является ближайшим, к которому я могу добраться, может ли кто-нибудь указать мне правильное направление? Благодаря!
Спасибо, другое предложение работало хорошо, но я бы предпочел свой подход, поскольку он является более удобным для чтения для меня! –