这是我在 Entity Framework 中使用的类层次结构的简化版本。
public class Questionnaire
{
public int Id { get; set; }
public ICollection<Question> Questions { get; set; }
}
public class Question
{
public int Id { get; set; }
public ICollection<Question> ChildQuestions { get; set; }
// Navigation properties
public int QuestionnaireId { get; set; }
public virtual Questionnaire Questionnaire { get; set; }
public int? ParentQuestionId { get; set; }
public virtual Question ParentQuestion { get; set; }
}
因此,调查问卷有一系列问题,每个问题都可以有自己的子问题集合。
我面临的问题是,当我从数据库中检索调查问卷时,其中包含的问题集合包括与该调查问卷相关的所有问题,包括嵌套在其他问题中的问题。
问题本身正确地包含对其子问题的引用。
目前,我正在解决这个问题,方法是从 Questionnaire.Questions
集合中删除所有 Questions
,其中 ParentQuestionId != null
。
是否有办法告诉 Entity Framework 仅在 Questionnaire.Questions
中包含具有 null ParentQuestionId
的 Questions
?
最佳答案
在你的 Controller 中:
Questionnaire questionnaire =
db.QuestionnaireDBSet
.Include(x => x.Questions.Where(q => q.ParentQuestionId == null))
.FirstOrDefault(x => x.Id == id);
假设 db
是您的 QuestionnaireDBContext...
编辑:正如OP所说,我们似乎无法使用包含进行过滤。所以上面的答案只适用于完美的世界。但现在你应该尝试这样的事情:
Questionnaire questionnaire =
db.QuestionnaireDBSet
.Include(x => x.Questions)
.Where(x => x.Questions.Any(q => q.ParentQuestionId == null))
.FirstOrDefault(x => x.Id == id);
我没有任何测试环境,所以只能给你一些建议。
关于c# - Entity Framework 6 - 处理嵌套对象的加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24588568/