Этот код эквивалентен:
previousPrice = dataPoints[0].Price;
var ret = dataPoints.Where(x => {
if(x.Price <= previousPrice)
{ previousPrice = x.Price; return true;}
return false;
}).ToList();
Однако, если вам не нужен список, используйте простые перечислимые числа и в конце наберите ToList
.Таким образом, вы можете использовать функцию отложенного выполнения, встроенную в LINQ.
Следующий код также эквивалентен:
DataPoint previous = dataPoints.FirstOrDefault();
var ret = dataPoints.Where(x => x.Price <= previous.Price)
.Select(x => previous = x).ToList();
Это работает из-за отложенного выполнения в LINQ.Для каждого элемента в dataPoints
он сначала выполнит часть Where
, а затем часть Select
и только после этого перейдет ко второму элементу в dataPoints
.
Вам необходимо решить, какую версиюВы хотите использовать.Второе не является таким явным, как первое, потому что вам нужно знать о внутренней работе LINQ.