while on IDataReader.Read doesn't work with yield return but foreach on reader does
问题 This is a commonly seen ADO.NET pattern to retrieve data from database using a data reader, but strangely doesn't work. Doesn't work: public static IEnumerable<IDataRecord> SelectDataRecord<T>(string query, string connString) where T : IDbConnection, new() { using (var conn = new T()) { using (var cmd = conn.CreateCommand()) { cmd.CommandText = query; cmd.Connection.ConnectionString = connString; cmd.Connection.Open(); using (var reader = (DbDataReader)cmd.ExecuteReader()) { // the main part