加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 实体框架包括Where

发布时间:2020-12-15 04:11:23 所属栏目:百科 来源:网络整理
导读:如果我有一个如下所示的查询: var forms = repo.GetForms().Where(f = f.SubForms.Any(sf = sf.Classes.Any(c = c.TermId == termId))); 从这里你可以看到我的架构如下: SubForm有许多具有多个Term的Class. 我想要的是: 所有SubForms及其在特定术语中的类
如果我有一个如下所示的查询:
var forms = repo.GetForms().Where(f => f.SubForms.Any(sf => sf.Classes.Any(c => c.TermId == termId)));

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

SubForm有许多具有多个Term的Class.

我想要的是:

所有SubForms及其在特定术语中的类.

现在发生的事情是我获得了在特定术语中具有任何类的所有SubForm.这意味着SubForm会返回所有子类,而不仅仅是与Term相关的子类.

例如.我有2个术语,每个术语有2个类的子表单.此查询返回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的评论:

如果你想加载他们有任何具有Term by termId的Class的SubForms,你可以从end到begin;像这样:

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();

或者以最简单的方式,您可以在您的期限上使用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

如果可以的话,请提出您的实体,或者更多地解释他们之间的关系.谢谢.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读