【发布时间】:2011-01-03 14:54:09
【问题描述】:
在查找如何使用 LINQ-to-SQL 执行与 SELECT TOP 5 等效的操作时,我看到的所有答案都建议使用 .Take(),如下所示:
var myObject = (
from myObjects in repository.GetAllMyObjects()
select myObject)
.Take(10);
我还不了解 LINQ 在幕后的大部分工作原理,但根据我对类 C 语言的理解,这可以通过首先分配一个包含所有记录的临时数组,然后复制数组中的前 10 个元素来解决变种。如果您正在处理小型数据集或没有任何性能限制,则不是这样的问题,但是如果您从可以包含数百万条记录的表中选择最近的 5 个日志条目,这对我来说似乎非常低效。
我对这是如何工作的理解有误吗?如果是这样,有人可以解释实际发生的情况吗?否则,有什么(如果有的话)更好(即更有效)的方法,只通过 LINQ-to-SQL 选择 x 记录?
[编辑]
我假设 myObject 类根据已接受答案中的建议将 LINQ-to-SQL 输出发送到调试输出。我最终从这里使用了 DebuggerWriter:http://www.u2u.info/Blogs/Kris/Lists/Posts/Post.aspx?ID=11
【问题讨论】:
-
在您的调试器中,您可以检查 Linq 对象,它会向您显示它将执行的 SQL 查询。也许这会有所帮助?
标签: asp.net sql linq-to-sql select