微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

LINQ和Entity Framework代码优先的SQL子查询结果

如何解决LINQ和Entity Framework代码优先的SQL子查询结果

您对投影的看法是正确的。

如果Contact具有导航属性Forms,则可以进行以下投影:

from c in context.Contacts
select new { Contact = c, FormsCount = c.Forms.Count() }

如果没有,则必须使用子查询

from c in context.Contacts
select new
{
  Contact = c, 
  FormsCount = context.Forms.Count(f => f.Contact_Id == c.Id)
}

EF将在一个SQL查询中处理这两种情况。

解决方法

我想进行一个查询,该查询将返回我的实体以及与其关联的实体之一的数量。例如:

select *,(select COUNT(*) from Forms where Contact_Id = Contacts.Id) 
as FormsCount from Contacts;

我的Contact实体具有一个名为FormsCount的属性,但由于没有在表中命名的列,因此未映射该属性。是否可以编写一个LINQ查询,使我返回具有填充的其他FormsCount属性的Contact实体?

另外,如果可以在单独的字段中获取FormsCount值,并且可以将其手动复制到实体,我会很高兴。查询的结果可以是这种形式,例如:

{
  Contact Contact;
  int FormsCount;
}

然后,我可以遍历结果并将FormsCount复制到Contact。也许可以通过使用投影来实现?

我知道如何使用2个查询来做到这一点:a)首先获取联系人实体b)获取第一个查询中返回的联系人的对或联系人ID和FormsCount。

但是我想使用一个查询来做到这一点。另外,我不希望FormsCount属性始终填充在我的Contact实体中,我想对此进行控制。有任何想法吗?

谢谢,米哈尔

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。