При поиске того, как выполнить эквивалент SELECT TOP 5 с LINQ-to-SQL, все ответы, которые я видел, предлагают использовать .Take (), например так:
var myObject = (
from myObjects in repository.GetAllMyObjects()
select myObject)
.Take(10);
Я пока не понимаю большей части того, как LINQ работает за кулисами, но, насколько я понимаю, языки, подобные С, решили эту проблему, сначала назначив временный массив, содержащий ВСЕ записи, а затем скопировав первые 10 элементов в массив к вар. Это не проблема, если вы работаете с небольшим набором данных или без каких-либо ограничений производительности, но мне кажется, что это неэффективно, если вы выбираете, например, 5 последних записей журнала из таблицы, которая может содержать миллионы записей.
Мое понимание того, как это работает неправильно? Если так, может кто-нибудь объяснить, что на самом деле происходит? В противном случае, какой (если таковой имеется) лучший (то есть более эффективный) способ выбора только x записей через LINQ-to-SQL?
[править]
У меня есть гипотетический класс myObject, отправляющий выходные данные LINQ-to-SQL на выходные данные отладки согласно предложению в принятом ответе. Я закончил тем, что использовал DebuggerWriter отсюда: http://www.u2u.info/Blogs/Kris/Lists/Posts/Post.aspx?ID=11