Представьте, что у меня есть следующее:
private IEnumerable MyFunc(parameter a)
{
using(MyDataContext dc = new MyDataContext)
{
return dc.tablename.Select(row => row.parameter == a);
}
}
private void UsingFunc()
{
var result = MyFunc(new a());
foreach(var row in result)
{
//Do something
}
}
В соответствии с документацией выполнение linq будет откладываться до фактического перечисления результата, который встречается в строке в foreach. Однако оператор using должен принудительно собирать объект в конце вызова MyFunct().
Что на самом деле происходит, когда будет выполняться операция удаления и/или результат?
Единственное, что я могу придумать, это отсроченное выполнение вычисляется во время компиляции, поэтому фактический вызов перемещается компилятором в первую строку foreach, заставляя использование выполнять правильно, но не запускаться до тех пор, пока строка foreach? Есть ли там гуру, который может помочь?
EDIT: ПРИМЕЧАНИЕ. Этот код работает, я просто не понимаю, как это сделать.
Я сделал некоторое чтение, и я понял в своем коде, что я назвал метод расширения ToList(), который, конечно, перечисляет результат. Поведенное поведение ответа совершенно правильно для ответа на реальный вопрос.
Извините за любую путаницу.