实体框架嵌套查询Select()问题

时间:2019-12-30 15:24:14

标签: c# sql-server entity-framework linq entity-framework-6

我是实体框架的新成员,并尝试使用Answers表中的外键获取数据,但出现错误The nested query is not supported. Operation1='Case' Operation2='Collect'

p.Answers.Count()p.Answers.SingleOrDefault().correct_answer作为字符串可以正常工作,但是p.Answers.Select(c => c.correct_answer).ToList()抛出nested query error

我想将其保留在一个查询中,因为可能有成千上万的问题,所以我不想检查单独查询的答案。以下是我的代码。

        return db.Questions.Where(p => p.q_id == q_id).Select(p => new QuestionViewModel
        {
            q_id = p.q_id,
            q_text = p.q_text,
            q_answer = p.Answers.Count() > 0 ? p.Answers.Select(c => c.correct_answer).ToList() : null
        }).OrderBy(x => x.q_id).ToList();

ViewModel

public class QuestionViewModel
{
    public long q_id { get; set; }
    public string q_text { get; set; }
    public List<string> q_answer { get; set; }
}

1 个答案:

答案 0 :(得分:2)

一个例外是告诉您EF不支持条件子查询,这是像这样的表达式所隐含的:

p.Answers.Count() > 0 ? p.Answers.Select(c => c.correct_answer).ToList() : null

因此只需删除条件运算符:

q_answer = p.Answers.Select(c => c.correct_answer).ToList()

如果没有相关问题的答案,q_answer将填充为 empty 列表,而不是null,这是集合类型的正常(预期)行为对象。