gpt4 book ai didi

c# - Entity Framework 包括 Where

转载 作者:太空狗 更新时间:2023-10-29 21:10:11 24 4
gpt4 key购买 nike

如果我有一个看起来像这样的查询:

var forms = repo.GetForms().Where(f => f.SubForms.Any(sf => sf.Classes.Any(c => c.TermId == termId)));

从这里你可以看到我的架构如下:

SubForm有很多Class其中有很多Term .

我想要的:

全部SubForms和他们的 Classes特别是Term .

现在发生的是我得到了所有 SubForm有任何 Class特别是Term .这意味着 SubForm带着ALL child 回来Class而不仅仅是与 Term 有关的那些.

例如。我有 2 个学期,每个学期有 2 个类(class)的子表格。此查询返回 4 个类,而不是该特定术语中的 2 个类。

有没有Include('Expression')我可以用它来表示我只想根据条件包含所有类吗?还是我的查询有误?

最佳答案

使用这个:

var subForms = repo.GetSubForms.Select(sf = new {
SubForm = sf,
Classes = sf.Classes.Where(c => c.TermId == termId)
}).ToList()
.Select(t => t.SubForm)
.ToList();

更新:基于@Slauma 的评论:

如果你想加载 SubForms,它们有任何 ClasstermIdTerm,你可以从头到尾;像这样:

var subForms = repo.Terms.Where(t => t.Id == termId).Select(t => new {
Term = t,
Class = t.Class,
SubForm = t.Class.SubForm
}).ToList()
.Select(t => t.SubForm).ToList();

以最简单的方式,您可以在Term 上使用Include,请参阅:

var subForms = repo.Terms.Include("Class.SubForm").Where(t => t.Id == termId)
.Select(t => t.Class.SubForm).ToList();

注意:我从你的问题中了解到,你有这样的关系:

SubForm has_many Class has_many Term

但是,您提供的代码显示了如下关系:

SubForm has_many Class
Term has_many Class

如果可以,请对您的实体提出疑问,或更多地解释它们之间的关系。谢谢。

关于c# - Entity Framework 包括 Where,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8437676/

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