0

LINQ の使用中に問題に直面しており、リポジトリ内にこのコードの迅速な解決策があるかどうかを知りたいと思っていました

GetCompletePackQuestion(int id)
    {
        var query = from q in DbSet where q.id == id
                    join a in DbContext.Set<answers>() on id equals a.question_id
                    join cc in DbContext.Set<correct_answers>() on id equals cc.question_id
                    select new CompletePackModel
                    {
                        Id = q.id,
                        Question = q.question,
                        CorrectAnswer = cc.answers.id,
                        Answers = q.answers.Select(ans => ans.answer)
                    };

        return query.SingleOrDefault();
    }

CompletePackModel には、文字列のリストとして Answers プロパティがあります。したがって、質問は次のとおりです。1 つの質問に対する多くの回答があるため、q.id は int ですが、質問は文字列で、answer_id は単一の ID です (まあ、実際には文字列を取得する必要があります)。そのIDに接続されたテーブル内)...最後のa.answerはリストでなければなりません...

これがうまくいく方法はありますか?

ありがとう


クエリで 1 つではなく 3 つの結果が得られるのはなぜですか?

4

2 に答える 2

1

Entity Framework を使用していると仮定しています (表示される DbContext オブジェクトに基づく)。その場合、 Question クラスにはすでに回答のコレクションが含まれている必要があります。次に、次のようなことを行う必要があります。

select new CompletePackModel
{
  Id = q.id,
  Question = q.question,                            
  CorrectAnswer = from answ in DbContext.Set<answers>() where answ.id == a.id select answ.answer,
  Answers = q.answers.Select(a => a.answer).ToList()
};
于 2013-01-10T15:05:40.243 に答える
0

これでうまくいきますか?

var query = from q in DbContext.Set<questions>()
                join a in DbContext.Set<answers>() on q.id equals a.question_id
                join cc in DbContext.Set<correct_answers>() on q.id equals cc.question_id
                select new CompletePackModel
                {
                    Id = q.id,
                    Question = q.question,                            
                    CorrectAnswer = cc.answer,
                    Answers = DbContext.Set<answers>().Where(answ => answ.question_id == q.id).ToList()
                };
于 2013-01-10T15:09:06.390 に答える