Mic*_*zyk 2 sql linq entity-framework ef-code-first
我想做一个查询,它将返回我的实体和其他一些相关实体.例如:
select *, (select COUNT(*) from Forms where Contact_Id = Contacts.Id)
as FormsCount from Contacts;
Run Code Online (Sandbox Code Playgroud)
My Contact实体有一个名为FormsCount的属性,但它没有映射,因为表中没有列出类似的列.是否可以编写一个LINQ查询,它将返回我的联系实体,并填写了额外的FormsCount属性?
或者,如果我可以在单独的字段中获取FormsCount值,我会很高兴,我可以手动将它们复制到实体.查询的结果可以是这种形式,例如:
{
Contact Contact;
int FormsCount;
}
Run Code Online (Sandbox Code Playgroud)
然后我可以迭代结果并将FormsCount复制到Contact.也许这可以通过使用预测来实现?
我知道如何使用2个查询来执行此操作:a)首先获取联系人实体b)获取第一个查询中返回的联系人的联系ID或联系人ID和FormsCount.
但我想使用一个查询来做到这一点.另外,我不希望我的Contact实体中始终填充FormsCount属性,我希望能够控制它.有任何想法吗?
谢谢,米哈尔
你对投射是对的.
如果Contact有导航属性,Forms您可以投影:
from c in context.Contacts
select new { Contact = c, FormsCount = c.Forms.Count() }
Run Code Online (Sandbox Code Playgroud)
如果没有,您将不得不使用子查询:
from c in context.Contacts
select new
{
Contact = c,
FormsCount = context.Forms.Count(f => f.Contact_Id == c.Id)
}
Run Code Online (Sandbox Code Playgroud)
EF将在一个SQL查询中处理这两种情况.
| 归档时间: |
|
| 查看次数: |
3137 次 |
| 最近记录: |