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 属性。所以问题是:一个问题有很多答案,所以当 q.id 是一个 int 时,询问一个字符串,而 answer_id 是一个单一的 id(其实我应该使用字符串在连接到该 id 的表中)...最后一个 a.answer 应该是一个列表...

有没有办法解决这个问题?

谢谢


为什么它在查询中给我 3 个结果而不是一个?

4

2 回答 2

1

我假设您使用的是实体框架(基于我看到的 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 回答