我有一个带有以下类的实体框架模型(我已经简化了这些类以便于查看):
PuzzleItem
-PuzzleId (int, primary key)
-Title
PuzzleProgress
-ProgressId (int, primary key)
-PuzzleId (FK)
-UserId (FK)
在PuzzleItem
我有许多级别。当PuzzleProgress
用户完成上一个级别时,通过插入该级别的记录来跟踪用户处于哪个级别。PuzzleProgress
首先,新用户将有一个条目PuzzleId = 1
。
在我的代码中,我使用以下语句执行左外连接,这样我将获得所有谜题的列表,并向我指出哪个谜题尚未解决。我从 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条记录)。
我试过玩代码,但我上面粘贴的代码是我能到达的最近的,有人能指出我正确的方向吗?谢谢!