【发布时间】:2013-03-15 11:01:32
【问题描述】:
我想知道...在我的应用程序中,我正在做这样的事情:
var threads = scykDb.Threads
.AsQueryable()
.Where(condition)
.OrderByDescending(t => t.DateCreated)
.Skip(threadsToSkip)
.Take(threadsPerPage)
.Select(t => t)
.ToList();
如果我在 Where() 之前执行 OrderBy() 会发生什么?重要吗?skip() 或 take() 怎么样,这些位置也重要吗?
var threads = scykDb.Threads
.AsQueryable()
.OrderByDescending(t => t.DateCreated)
.Where(condition)
.Skip(threadsToSkip)
.Take(threadsPerPage)
.Select(t => t)
.ToList();
【问题讨论】:
-
我也想知道。试试看。看看会发生什么。
-
@Dan 为什么要避免
ToList()? -
Linq 有一个延迟执行,它会尽可能晚地发生,以便立即在树中评估所有表达式。顺序应该无关紧要。
-
@Dan,你需要 .ToList() 来实际
download数据库中的数据。我不知道它是如何工作的,但在我调用 .ToList()threads之前只是一个查询,而不是数据。 -
OP,当您迭代查询时(例如在 foreach 循环中),您将调用它并具体化数据库中的结果,因此 ToList() 不是严格必要的。也就是说,在存储库中以可预测的方式强制它是我选择做的事情。当您想要延迟执行时,Dan 的建议是有效的,但有时您根本不想要。