gpt4 book ai didi

c# - Entity Framework 6 - 处理嵌套对象的加载

转载 作者:行者123 更新时间:2023-11-30 22:05:08 24 4
gpt4 key购买 nike

这是我在 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 中包含 Questions,它的 ParentQuestionId 为空?

最佳答案

在你的 Controller 中:

Questionnaire questionnaire = 
db.QuestionnaireDBSet
.Include(x => x.Questions.Where(q => q.ParentQuestionId == null))
.FirstOrDefault(x => x.Id == id);

假设 db 是您的 QuestionnaireDBContext...

编辑:正如 OP 所说,我们似乎无法使用 Include 进行过滤。所以上面的答案只适用于完美的世界。但是现在你应该尝试这样的事情:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com