次のクラスを持つEntityFrameworkモデルがあります(見やすくするためにクラスを簡略化しました)。
PuzzleItem
-PuzzleId (int, primary key)
-Title
PuzzleProgress
-ProgressId (int, primary key)
-PuzzleId (FK)
-UserId (FK)
私にはいくつPuzzleItem
かのレベルがあります。ユーザーが前のレベルを完了したときにそのPuzzleProgress
レベルのレコードを挿入することにより、ユーザーがどのレベルにいるかを追跡します。まず、新しいユーザーはで1つのエントリを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つのレコードがあります)。
コードを試してみましたが、上に貼り付けたコードが最も近いコードです。誰かが私を正しい方向に向けることができますか?ありがとう!