2010-11-16 4 views
2
var v = object.where(a => a.date > DateTime(2000,1,1,)); 
list = v.ToList(); 

Хорошо, поэтому для следующего кода у меня есть точки разрыва, установленные на каждой строке. Когда я добираюсь до первой строки, я запускаю код (F5), пока не достигнет второй строки. Когда я выхожу вперед (F11) со второй строки, он возвращается к первой строке. Когда я запускаю код (F5), он не попадает во вторую строку и выдает ошибку.Linq Query ToList() Acting Up

Является ли мой запрос linq неправильным или что-то еще не работает? Я полностью confuzored.

+0

Что такое «объект»? – SLaks

+0

Я думаю, вам нужно опубликовать некоторый фактический код. Пример as-is не должен компилироваться. –

+1

Какой-то реальный код будет приятным. Этот пример не является полным и не компилируется. – Femaref

ответ

3

Из-за отсроченного выполнения выражение лямбда в первой строке будет выполняться только тогда, когда результат будет итерирован во второй строке.

Это совершенно верно.

Here - очень хорошее объяснение.

+0

Это не приведет к тому, что отладчик будет прыгать в первую строку. – Femaref

+0

@Femaref: Вы уверены? – SLaks

+0

yup. Отложенное выполнение выполняется с помощью конечного автомата с использованием пользовательских итераторов (если я правильно помню блог Эрика Липперта). Использование 'yield return' не приведет к тому, что отладчик будет переходить к строке, потому что это будет означать, что он« будет »где-то в коде, полностью игнорируя поток управления. – Femaref

Смежные вопросы