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