在条件为真的情况下,我需要对联接结果集中的项进行计数。因此,我有一种“从哪里加入”的表达方式。此表达式必须以select或groupby结尾。我实际上不需要列数据,因此不选择它会更快:
count = (from e in dc.entries select new {}).Count();我有两个问题:
谢谢。
请特别注意:
我假设当我使用select查询时,当我使用query.Count和Table.Count时,它会填充数据。期待那些理解我所要求的可能更好的方法来做这件事的人,并对实际发生的事情有一些详细的了解。我得把伐木挖出来更深一点。
发布于 2010-12-01 21:11:18
Queryable.Count
执行表示调用计数(IQueryable)的表达式树所产生的查询行为取决于源参数类型的实现。预期的行为是计算源中的项目数。
实际上,如果使用LinqToSql或LinqToEntities,Queryable.Count()就会被发送到数据库中。没有将列加载到内存中。检查生成的sql以确认。
我假设当我使用select查询时,当我使用query.Count vs Table.Count时,它将填充数据。
这不是真的。检查生成的sql以确认。
我必须复制我的整个查询副本。是否有一种方法来构造我的查询,在其中我可以让它在一个位置同时计算和得到一个包含所有字段的列表。
如果您同时需要计数和列表,请获取列表并计数。
如果你有时需要伯爵,有时你需要名单.编写一个返回复杂IQueryable的方法,有时调用.Count(),有时调用.ToList();
我实际上不需要列数据,因此不选择它会更快。
在您的场景中,这基本上是错误的。在索引覆盖结果列但没有任何结果列的场景中,这是正确的。
在您的场景中,无论查询优化器选择什么索引,该索引都可以用于计数。
总结:查询优化器将执行您想要的优化。
发布于 2010-12-01 17:58:14
//you can put a where condition here
var queryEntries = from e in dc.entries select e;
//Get count
queryEntries.Count();
//Loop through Entries, so you basically returned all entries
foreach(entry en in queryEntries)
{}https://stackoverflow.com/questions/4326171
复制相似问题