Чтобы действительно понять (и оценить) различие вам нужно учитывать разницу между заявлением и выражением. Как вы знаете, императивные языки программирования, такие как C# и VB, традиционно используют операторы, которые выполняются в последовательности для достижения определенной цели. В такой схеме вы извлекаете данные, а затем нажимаете их на некоторые другие операторы. Функциональное программирование, напротив, имеет тенденцию использовать выражения , которые являются только значениями. В случае LINQ вы объявляете выражение запроса, которое в какой-то момент будет оценивать до значения, но оно не делает этого, пока оно не понадобится. Это позволяет, как программисту, больше сосредоточиться на том, что делает ваша программа, а не на том, как она это делает. В более широком смысле лень описывает стратегию оценки, которая обычно используется на языках функционального программирования. Например, если у вас заявление вроде следующего:
let x = 2 * y + 7
ленивый язык программирования не будет беспокоить вычисления выражения, пока он явно не нужно, но в то же время вы можете просто обратиться к нему с помощью связывания x.Точно так же, когда вы делаете заявление вроде следующего в LINQ:
var collection = from s in S where predicate(s)
вы объявили выражение и сковал его коллекция но вы на самом деле не нужно, пока вы делаете что-то с сбор. Таким образом, вы можете объявить его в любом месте своего кода и не беспокоиться о том, что он занимает память, когда он не используется, и поэтому вы теперь больше думаете о проблеме, которую пытаетесь решить, а не в подробных подробностях о том, как компьютер должен идти о его решении.
Итак, в общем, в (нетерпеливом) императивном стиле программирования вы захватываете данные, а затем нажимаете на какую-то функцию, которая будет действовать на нее. В (ленивом) функциональном стиле программирования вы объявляете выражение, и в какой-то момент оно будет оцениваться, когда это необходимо, что в случае с базой данных означает, что функция, которая нуждается в значении выражения запроса, будет pull it когда это необходимо. Однако Push/Pull - это плохая терминология.
Почему именно это было downvoted? Не достаточно многословие? – Soviut