C# 实体框架-填充子对象,筛选子对象的子对象

C# 实体框架-填充子对象,筛选子对象的子对象,c#,linq,entity-framework,parent-child,C#,Linq,Entity Framework,Parent Child,我试图优化一些代码,但我有点问题。我有一个数据库,有问题的表在EDMX中看起来像这样。。。 每个EmailQueue项目可以有多个EmailContact和EmailEntity记录,每个EmailContact可以有多个EmailSendFailures,但大多数都没有 我想获取每个EmailQueue,其中至少有一个EmailEntity记录,以及至少一个没有EmailSendFailure记录的EmailContact记录*编辑:另外,我不想在此查询中包括那些EmailContact记录

我试图优化一些代码,但我有点问题。我有一个数据库,有问题的表在EDMX中看起来像这样。。。

每个EmailQueue项目可以有多个EmailContact和EmailEntity记录,每个EmailContact可以有多个EmailSendFailures,但大多数都没有


我想获取每个EmailQueue,其中至少有一个EmailEntity记录,以及至少一个没有EmailSendFailure记录的EmailContact记录*编辑:另外,我不想在此查询中包括那些EmailContact记录*

经过一些堆栈溢出和一些尝试和错误之后,我基本上能够通过以下代码实现一些东西:

var emails2 =
    (from eqs in
         this.context.EmailQueues
         .Include(q => q.EmailContacts)
         .Include(e => e.EmailEntities)
     where eqs.EmailContacts.Count > 0
     && eqs.EmailEntities.Count > 0
     && eqs.SentFlag == false
     select new
     {
         EmailQueue = eqs,
         EmailContact = eqs.EmailContacts.Where(c => !c.EmailSendFailures.Any()),
         EmailEntity = eqs.EmailEntities
     }).ToList();
问题是它会返回System.Collections.Generic.List。我真的不想那样。我想要一份清单

我尝试了这个,似乎它应该可以工作,但我得到了这个错误:

包含路径表达式必须引用导航属性 在类型上定义。使用虚线路径进行参考导航 属性和集合导航的选择运算符 财产

列出电子邮件1=
Include(q=>q.EmailContacts.Where(c=>!c.EmailSendFailures.Any()))
.Include(e=>e.EmailEntities)
.Where(eqs=>eqs.EmailContacts.Count>0&&eqs.EmailEntities.Count>0&&eqs.SentFlag==false)
.ToList();
有人知道我可能做错了什么吗?我怀疑它在导航属性中的某个地方,因为在进入“我放弃,我正在向StackOverflow发帖”阶段之前,我在“尝试和错误”(错误多于尝试)阶段遇到了一些问题。

“我想获取至少有一条EmailEntity记录和至少一条没有EmailSendFailure记录的EmailContact记录的每个EmailQueue”

List result=context.EmailQueues.Where(e=>e.EmailEntities.Any()&&
e、 EmailContacts.Any(ec=>!ec.EmailSendFailures.Any()).ToList();

尝试先执行所有.include,然后执行where子句,如:

context.Subjects.Include(r => r.RelatedSubjects).Include(t => t.Organisations).Include(y => y.Organisations.Select(i => i.Directories))
            .Where(y => y.Organisations.Any(e => e.Status == "Live")); }

我应该说得更具体一些。是的,这确实满足了我写这篇文章时提出的问题。问题是,我不想包含任何具有EmailSendFailure记录的EmailContact记录。在我的数据中,我有一个EmailQueue记录,它有两个EmailContact记录,其中一个具有EmailSendFailure记录。此代码同时返回这两个记录。”此代码同时返回(EmailContact)”,我不理解,此查询返回EmailQueue的非EmailContacts,这使用延迟加载,如果导航到每个EmailQueue上的EmailContacts集合,Entity framework将对数据库执行新调用,并检索相关的EmailContacts
List<EmailQueue> result = context.EmailQueues.Where(e=>e.EmailEntities.Any() &&
e.EmailContacts.Any(ec=>!ec.EmailSendFailures.Any())).ToList();
context.Subjects.Include(r => r.RelatedSubjects).Include(t => t.Organisations).Include(y => y.Organisations.Select(i => i.Directories))
            .Where(y => y.Organisations.Any(e => e.Status == "Live")); }