. net LINQ到SQL的查询效率
本文关键字:查询 效率 SQL LINQ net | 更新日期: 2023-09-27 18:06:18
我正在研究LINQ,特别是MSDN上的LINQ to SQL,并且遇到了这个例子,除非有一些聪明的魔法在背后,否则它看起来像是一个极端牺牲计算资源而不是代码可读性的案例。
int highScoreCount =
(from score in scores
where score > 80
select score)
.Count();
有人请告诉我,这个查询不加载列表中的所有分数只是为了得到他们的计数。甚至超过80分也不行。
如果这是这个特定查询的情况,是否有一个改变它,以避免加载完整的分数列表?比如"select (count) score"
谢谢。
编辑:我为懒惰而道歉,没有首先查找查看生成SQL的方法。我发现最简单的方法就是使用LinqPad
()内部语句的第一部分实际上计算尚未执行的IQueryable。当您对它调用Count()函数时,它将编译并计算查询,如下所示
SELECT
[GroupBy1].[A1] AS [C1]
FROM ( SELECT
COUNT(1) AS [A1]
FROM [dbo].[scores] AS [Extent1]
WHERE [Extent1].[score] > 80
) AS [GroupBy1]
有人请告诉我,这个查询不加载列表中的所有分数只是为了得到他们的计数。甚至超过80分也不行
我告诉你,它不会将任何项加载到内存中,它会生成相当于你手动编写的SQL查询:
SELECT COUNT(*) As Count FROM MyTable WHERE Score > 80;
,并将该值返回给您。
您可以通过查看发送到数据库的SQL来验证自己。通过启用对数据库本身的分析,或者通过使用跟踪:如何查看LINQ生成的SQL语句?
LINQ在如何获取数据方面相当聪明…也许不如查询优化器那么聪明,但它可以做一些正确的事情。您可以很容易地查看由它生成的SQL。下面的文章解释:
如何查看LINQ生成SQL语句?