Linq-to-Sql Count

Cur*_*ite 3 linq-to-sql

我需要对条件为真的连接结果集中的项进行计数.因此我有一个"从哪里加入哪里"的表达方式.该表达式必须以select或groupby结尾.我实际上不需要列数据,因此可以更快地不选择它:

count = (from e in dc.entries select new {}).Count();
Run Code Online (Sandbox Code Playgroud)

我有两个问题:

  1. 在数据库负载方面有更快的方法吗?
  2. 我必须复制我的整个查询副本.有没有办法构建我的查询,我可以在一个地方为两个计数和获得所有字段的列表?

谢谢.

请特别注意:

  1. 查询是连接而不是简单表,因此我必须使用select语句.
  2. 我将需要2个不同的查询主体,因为我不需要为计数加载所有实际字段,但是将列表.

我假设当我使用select查询时,当我使用query.Count vs Table.Count时,它正在填充数据.期待那些了解我要求的更好方法的人以及对实际情况的一些详细了解.我需要提取日志来深入研究这个问题.

Amy*_*y B 6

Queryable.Count

由于执行表示调用Count(IQueryable)的表达式树而发生的查询行为取决于source参数类型的实现.预期的行为是它计算源中的项目数.

实际上,如果使用LinqToSql或LinqToEntities,Queryable.Count()则会将其发送到数据库中.没有列被加载到内存中.检查生成的sql以确认.


我假设当我使用select查询时,当我使用query.Count vs Table.Count时,它正在填充数据

这不是真的.检查生成的sql以确认.


我必须复制我的整个查询副本.有没有办法构建我的查询,我可以在一个地方为两个计数和得到一个包含所有字段的列表

如果您需要计数和列表,请获取列表并对其进行计数.

如果你有时需要计数,有时你需要列表...写一个返回复杂IQueryable的方法,有时调用.Count()和其他时间调用.ToList();


我实际上不需要列数据,因此可以更快地不选择它.

在您的方案中,这基本上是错误的.在索引覆盖结果列但您没有任何结果列的情况下可能会出现这种情况.

在您的方案中,无论查询优化器选择何种索引,该索引都可用于计数.

总结:查询优化器将执行您想要的优化.