我有以下类的实体框架模型(我已经简化了类简单的观看):实体框架LEFT OUTER JOIN不工作
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条记录)。
我已经试过玩弄的代码,但我上面粘贴的一个最近的我能到,任何人可以点我在正确的方向?谢谢!
感谢,其他的建议的工作为好,但我更喜欢你的方法,因为它更具有可读性给我! – 2013-03-26 07:16:14