Enlazar datagrid a datareader

Quiero poder ingresar SQL en un cuadro de texto y mostrar los resultados en un Datagrid de WPF. Pensé comenzar con unaSqlDataReader, y establecer el datagrid'sItemsSource al lector de datos:

using (var cmd = conn.CreateCommand()) {
    cmd.CommandText = sql.Text;
    sqlResults.ItemsSource = cmd.ExecuteReader();
}

pero esto falla con el siguiente error:Invalid attempt to call FieldCount when reader is closed, lo que entiendo es que cuando WPF comienza a leer elFieldCount propiedad del objeto fila, lausing El bloque ya se ha salido.

Así que intenté usar LINQ yToList, para conseguir algo que persistiría en la memoria:

sqlResults.ItemsSource = cmd.ExecuteReader().Cast<DbDataRecord>().ToList();

pero esto solo muestra el 'FieldCount' para cada fila, que aparentemente es la única propiedad queDbDataRecord tiene.

Algunas soluciones que he considerado:

¿Enlazar a un DataTable en lugar de un DataReader? Pero no necesito capacidades de edición.¿Seleccionar cada fila en una estructura de datos en memoria? ¿Qué estructura de datos puedo usar? No puedo usar tipos anónimos, porque los nombres y tipos de las columnas cambian según la declaración SQL. Si yo usoList<object>, ¿cómo sabrá el datagrid para generar columnas para cada objeto en la lista?Crear un descriptor de tipo personalizado? Parece una exageración.

Pero creo que la solución debería ser muy simple y fácil. ¿Me estoy perdiendo algo básico aquí?

Respuestas a la pregunta(2)

Su respuesta a la pregunta