【问题标题】:Entity framework query child on to many实体框架查询子到很多
【发布时间】:2015-01-16 17:10:25
【问题描述】:

我正在努力处理如下的 EF 查询。

问题组表与 question_group_question 的比例为 1:n,我不想返回设置了已删除标志的问题组表以尝试 question_group_question 表

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

这运行正常,但返回已删除设置为 true 的 question_group_question。

有什么想法吗?谢谢

【问题讨论】:

  • 试试from qg in this.Question_Group Where qg.Question_Group_Question.Question.Removed_Flag == false Select qg
  • 不行,因为关系是 1:n,你不能访问 REmoved_Flag,因为它是一个集合
  • 是的..我不知道我为什么这么说..我一定是累了..

标签: c# sql linq entity-framework


【解决方案1】:
from qg in this.Question_Group
                    where qg.Question_Group_Question.Question.Removed_Flag==false                 
                    select qg

【讨论】:

  • 我认为,当您为您的意图添加一些解释时,这对操作人员和其他访问者会更有帮助。
【解决方案2】:

查看这个,

 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) 中的 ANY 项 (Question) 具有具有特定值 (false) 的成员 (Removed_Flag),则您可以看到 qg.Question_Group_Question.Any(qgq => qgq.Question.Removed_Flag == false) 正在返回 true


如果您打算查询/获取 Question_Group 实体,其中 ALLRemoved_Flag 为 false,则 Question_Group_Question 集合中的 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_GroupQuestion_Group_Question 的关系中(即 1:N),您将返回 @ 的实体987654331@ 对应每个Question_Group_Question

这似乎是您打算做的,所以为什么不直接在Question_Group_Question 上查询:(对于 Question_Group_Question 到 Question_Group 是 N:1)

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

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

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) 
    }

QuestionGroupQuestion 类成为查询表达式的一部分,因此在执行的生成的 SQL 语句中表达。

【讨论】:

  • 谢谢,我试过了,它在 this.Question_Group_Question 中完成了我想要的 qgq 的操作,其中 qgq.Question.Removed_Flag == false select qgq.Question_Group
  • 对 DTO 也有很好的提示,我目前拥有的应用程序没有这样做,但是可以添加一个模式来帮助数据传输,谢谢
猜你喜欢
  • 2014-12-13
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
  • 2011-12-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多