我正在努力解决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。
有什么想法吗?感谢
答案 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_Question
与Question_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语句中表示。