当前位置: 首页 > 面试题库 >

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

易祖鹤
2023-03-14
问题内容

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

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实体中,我想对此进行控制。有任何想法吗?

谢谢,米哈尔


问题答案:

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

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



 类似资料:
  • 问题内容: 有没有一种方法可以告诉MS SQL查询不是太重要,它可以(并且应该)花费时间? 同样,有没有办法告诉MS SQL它应该赋予查询更高的优先级? 问题答案: 在低于SQL 2008的版本中不存在。在SQL Server 2008中,有资源调控器。使用该功能,您可以根据登录名的属性(登录名,应用程序名等)将登录名分配给组。然后可以将组分配给资源池,并且可以将资源所受的限制或限制应用于这些资源

  • 问题内容: 不知道为什么将其链接为骗子。 问题是不同的。答案是不同的。不知道要更改什么。如果有人看到我想念的东西,请告诉我… 使用这两个查询,我得到的结果数量不同。在分析了几个小时之后,我需要扔掉毛巾,承认我无法发现重要性的差异。由于我的方法库已空荡荡,因此我需要帮助。 LINQ SQL 第一个问题是上述两个陈述是否确实相等,或者我是否缺少某些内容。第二个问题是我所缺少的(如果有的话)或如何解决它

  • 问题内容: 我没有MS SQL(SQL Express 2008)的“完整”版本,所以我没有探查器工具。 我想查看由我的实体框架代码生成的SQL,但是我发现的所有示例都使用了 语法类型;但我的大部分查询更像是.. 语法类型。如何查看通过这种编码方式生成的SQL?有任何想法吗? 问题答案: Express Edition是否支持扩展事件?如果是这样,它将以类似于Profiler的方式捕获语句并sp完

  • 问题内容: 我的SQL代码如下: 等效的linq表达式是什么? 问题答案: 我第一次尝试在 来源 LINQ to SQL中的NOT IN子句

  • 问题内容: T-SQL查询 上面查询的LINQ to Entities替代 在stackoverflow上有很多复杂的子查询,我只想看一个简单的例子,说明如何通过linq完成一个简单的子查询。 问题答案: 简单的答案是使用 “ let” 关键字并生成一个子查询,该查询支持您的主要实体的条件集。 这将在TSQL中创建一个存在块,类似于 它接近您的要求,通常会在SQL Server上创建相同的查询计划

  • 问题内容: 以下查询对我来说绝对正常: 但是,如果我使用而不是与子查询的结果进行比较,则不会得到任何结果。如何在上述查询中使用? 问题答案: 首先,这个查询 应该 不会是工作的罚款: 因为不正确的SQL。并且,您应该学习使用正确的语法。大概,您打算: 可以想象,您可以在子查询中添加代替和’%’的内容: 但我会这样写: 这与查询没有完全相同的作用。它做一些更合理的事情。它会确定子查询中是否有 任何