首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linq-to-Sql计数

Linq-to-Sql计数
EN

Stack Overflow用户
提问于 2010-12-01 15:52:00
回答 2查看 5.4K关注 0票数 4

在条件为真的情况下,我需要对联接结果集中的项进行计数。因此,我有一种“从哪里加入”的表达方式。此表达式必须以select或groupby结尾。我实际上不需要列数据,因此不选择它会更快:

代码语言:javascript
复制
count = (from e in dc.entries select new {}).Count();

我有两个问题:

  1. 是否有更快的方法在db负载方面做到这一点?
  2. 我必须复制我的整个查询副本。是否有一种方法来构造我的查询,在其中我可以让它在一个位置进行两次计数,并得到一个包含所有字段的列表?

谢谢。

请特别注意:

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

我假设当我使用select查询时,当我使用query.Count和Table.Count时,它会填充数据。期待那些理解我所要求的可能更好的方法来做这件事的人,并对实际发生的事情有一些详细的了解。我得把伐木挖出来更深一点。

EN

回答 2

Stack Overflow用户

发布于 2010-12-01 21:11:18

Queryable.Count

执行表示调用计数(IQueryable)的表达式树所产生的查询行为取决于源参数类型的实现。预期的行为是计算源中的项目数。

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

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

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

我必须复制我的整个查询副本。是否有一种方法来构造我的查询,在其中我可以让它在一个位置同时计算和得到一个包含所有字段的列表。

如果您同时需要计数和列表,请获取列表并计数。

如果你有时需要伯爵,有时你需要名单.编写一个返回复杂IQueryable的方法,有时调用.Count(),有时调用.ToList();

我实际上不需要列数据,因此不选择它会更快。

在您的场景中,这基本上是错误的。在索引覆盖结果列但没有任何结果列的场景中,这是正确的。

在您的场景中,无论查询优化器选择什么索引,该索引都可以用于计数。

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

票数 6
EN

Stack Overflow用户

发布于 2010-12-01 17:58:14

代码语言:javascript
复制
//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)
{}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4326171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档