Vincular datagrid ao datareader

Eu quero ser capaz de inserir SQL em uma caixa de texto e exibir os resultados em um datagrid do WPF. Eu pensei em começar com umSqlDataReader, e defina o datagridItemsSource para o leitor de dados:

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

mas isso falha com o seguinte erro:Invalid attempt to call FieldCount when reader is closed, o que eu entendo que significa que no momento em que WPF começa a ler oFieldCount propriedade do objeto de linha, ousing bloco já foi encerrado.

Então eu tentei usar o LINQ eToList, para obter algo que persistiria na memória:

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

mas isso só exibe o 'FieldCount' para cada linha, que aparentemente é a única propriedade queDbDataRecord&nbsp;tem.

Algumas soluções que considerei:

Vincular a uma DataTable em vez de um DataReader? Mas não preciso de recursos de edição.Selecione cada linha em uma estrutura de dados na memória? Qual estrutura de dados eu poderia usar? Eu não posso usar tipos anônimos, porque os nomes e tipos das colunas mudam com base na instrução SQL. Se eu usarList<object>, como o datagrid saberá gerar colunas para cada objeto na lista?Crie um descritor de tipo personalizado? Parece um exagero.

Mas sinto que a solução deve ser muito simples e fácil. Estou faltando alguma coisa básica aqui?