实体框架查询子对很多

时间:2015-01-16 17:10:25

标签: c# sql linq entity-framework

我正在努力解决EF查询问题,如下所示。

问题组表格中有1:n到question_group_question,我不想返回已删除标记设置的问题,以尝试使用question_group_question表格

from qg in this.Question_Group
                    from qgq in qg.Question_Group_Question
                    where qgq.Question.Removed_Flag==false
                    select qg

这样运行正常,但会返回已将set设置为true的question_group_question。

有什么想法吗?感谢

1 个答案:

答案 0 :(得分:0)

回顾一下,

 from qg in this.Question_Group 
 Where qg.Question_Group_Question.Where(qgq => qgq.Question.Removed_Flag == false).Count() > 0 
 & qg.Question_Group_Question.Any(qgq => qgq.Question.Removed_Flag == false)
 Select qg

如果集合(Question_Group_Question)中的Items(Question)的 ANY 具有特定值的成员(Removed_Flag),则可以看到qg.Question_Group_Question.Any(qgq => qgq.Question.Removed_Flag == false)正在返回true (假)。


如果您打算在Question_Group集合中查询/获取Removed_Flag所有 Question实体的Question_Group_Question实体的 from qg in this.Question_Group Where qg.Question_Group_Question.Where(qgq => qgq.Question.Removed_Flag == false).Count() > 0 & qg.Question_Group_Question.All(qgq => qgq.Question.Removed_Flag == false) Select qg 实体。

Question_Group

从我可以告诉您当前的查询,您实际上是在执行内部联接,因此在Question_Group_QuestionQuestion_Group(即1:N)的关系中,您将返回每个Question_Group_Question的实体Question_Group_Question

这似乎是你打算做的,所以为什么不在 from qgq in this.Question_Group_Question where qgq.Question.Removed_Flag == false select qgq.Question_Group 上查询:(对于Question_Group的Question_Group_Question是N:1)

class QuestionGroupQuestionPair {
   public Question_Group QuestionGroup {get;set;}
   public IEnumerable<Question_Group_Question> QuestionCollection {get;set;}
}

IEnumerable<QuestionGroupQuestionPair> query = from qg in this.Question_Group
select new QuestionGroupQuestion() 
    { 
       QuestionGroup = qg,
       QuestionCollection = qg.Question_Group_Question.Where(qgq => qgq.Question.Removed_Flag == false) 
    }

或者(和/或另外),我建议您在查询中使用DTO。特别是如果你想明确保持1:N结构。

QuestionGroupQuestion

{{1}}类成为查询表达式的一部分,因此在生成的SQL语句中表示。