Linq to sql Linq到Sql计数
我需要对条件为true的联接结果集中的项进行计数。因此,我有一个“fromjoinwhere”类型的表达式。此表达式必须以select或groupby结尾。我实际上不需要列数据,因此不选择它会更快:Linq to sql Linq到Sql计数,linq-to-sql,Linq To Sql,我需要对条件为true的联接结果集中的项进行计数。因此,我有一个“fromjoinwhere”类型的表达式。此表达式必须以select或groupby结尾。我实际上不需要列数据,因此不选择它会更快: count = (from e in dc.entries select new {}).Count(); 我有两个问题: 在db负载方面有没有更快的方法 我必须复制查询的整个副本。有没有一种方法可以构造我的查询,让它在一个地方同时进行计数和获取一个包含所有字段的列表 谢谢 请特别注意: 查询是一
count = (from e in dc.entries select new {}).Count();
我有两个问题:
//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)
{}
作为查询对象发生的查询行为
执行表达式树的结果
那代表着召唤
计数(IQueryable)
取决于该计划的实施
源参数的类型。这个
预期的行为是它的价值
源中的项目数
事实上,如果使用LinqToSql或LinqToEntities,Queryable.Count()
将被发送到数据库中。没有列被加载到内存中。检查生成的sql以确认
我假设当我使用select查询时,当我使用query.Count vs Table.Count时,它正在填充数据 事实并非如此。检查生成的sql以确认
我必须复制查询的整个副本。有没有一种方法可以构造我的查询,让它在一个地方同时进行计数和获取一个包含所有字段的列表 如果您需要计数和列表,请获取列表并进行计数 如果你有时需要计数,有时需要列表。。。编写一个返回复杂IQueryable的方法,有时调用.Count(),有时调用.ToList()
我实际上不需要列数据,因此不选择它会更快 在您的场景中,这基本上是错误的。在索引覆盖结果列,但没有任何结果列的情况下,这可能是真的 在您的场景中,无论查询优化器选择什么索引,都可以使用该索引进行计数
总结:查询优化器将执行您想要的优化。您可以将代码简化为
count=dc.entries.count()代码>@Albin请参见我的上文。这不是一个表,而是一个包含连接的查询。谢谢你的建议。但是,问题是我们如何优化查询。这比我上面提到的效率要低。您正在加载所有数据和所有字段,这比让SQL执行标量效率要低得多。我再次查看了您的代码,虽然我可以使用Count()方法不复制我的代码,但它仍然会加载所有条目(我相信)。这就是我需要澄清的事实。谢谢你的回答。当我在调试器中查看时,它显示了所有条目。这是因为调试器视图吗?还有一件事,我的列表需要一个loadswith,而我的计数不需要,因此我猜查询优化器无法处理这一点,这表明需要两个例程。我会在有时间时检查这一点。但是,我还没有时间详细探讨这个问题。您在调试器中悬停的是什么?这是不是在张贴的代码中没有的东西?您可能希望使用它来查看发布到数据库的实际sql:DataContext.Log=Console.Out;