Вот пример кода для извлечения данных из базы данных с использованием ключевого слова yield, которое я нашел в нескольких местах при поиске в google:
public IEnumerable<object> ExecuteSelect(string commandText)
{
    using (IDbConnection connection = CreateConnection())
    {
        using (IDbCommand cmd = CreateCommand(commandText, connection))
        {
             connection.Open();
             using (IDbDataReader reader = cmd.ExecuteReader())
             {
                while(reader.Read())
                {
                    yield return reader["SomeField"];
                }
             }
             connection.Close();
        }
    }
}
Я правильно понял, что в этом примере кода соединение не будет закрыто, если мы не будем перебирать весь файл данных?
Вот пример, который не закроет соединение, если я правильно понял выход.
foreach(object obj in ExecuteSelect(commandText))
{
  break;
}
Для подключения db, которое может быть не катастрофическим, я предполагаю, что GC в конечном итоге очистит его, но что, если вместо соединения это был более важный ресурс?
