Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
首先在LINQ和实体框架代码中生成SQL子查询结果_Sql_Linq_Entity Framework_Ef Code First - Fatal编程技术网

首先在LINQ和实体框架代码中生成SQL子查询结果

首先在LINQ和实体框架代码中生成SQL子查询结果,sql,linq,entity-framework,ef-code-first,Sql,Linq,Entity Framework,Ef Code First,我想进行一个查询,该查询将返回我的实体以及另外一些它们关联的实体。例如: select *, (select COUNT(*) from Forms where Contact_Id = Contacts.Id) as FormsCount from Contacts; { Contact Contact; int FormsCount; } 我的联系人实体有一个名为FormsCount的属性,但它没有被映射,因为表中没有这样命名的列。是否可以编写一个LINQ查询,返回填写了其他F

我想进行一个查询,该查询将返回我的实体以及另外一些它们关联的实体。例如:

select *, (select COUNT(*) from Forms where Contact_Id = Contacts.Id) 
as FormsCount from Contacts;
{
  Contact Contact;
  int FormsCount;
}
我的联系人实体有一个名为FormsCount的属性,但它没有被映射,因为表中没有这样命名的列。是否可以编写一个LINQ查询,返回填写了其他FormsCount属性的联系人实体

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

select *, (select COUNT(*) from Forms where Contact_Id = Contacts.Id) 
as FormsCount from Contacts;
{
  Contact Contact;
  int FormsCount;
}
然后我可以迭代结果并将FormsCount复制到Contact。也许这可以通过使用投影来实现

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

但我想用一个查询来实现这一点。另外,我不希望FormsCount属性总是填写在我的联系人实体中,我希望能够控制它。有什么想法吗

谢谢,
迈克尔

关于投影,你是对的

如果
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查询中处理这两种情况