Привязать сетку данных к читателю

Я хочу иметь возможность вводить SQL в текстовое поле и отображать результаты в таблице данных WPF. Я думал начать сSqlDataReaderи установите сетку данныхItemsSource читателю данных:

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

но это терпит неудачу со следующей ошибкой:Invalid attempt to call FieldCount when reader is closedЯ понимаю, что к тому времени WPF начинает читатьFieldCount свойство объекта строки,using блок уже вышел.

Поэтому я попытался использовать LINQ иToList, чтобы получить то, что сохранится в памяти:

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

но это только отображает 'FieldCount' для каждой строки, которая, по-видимому, является единственным свойством, котороеDbDataRecord есть.

Некоторые решения, которые я рассмотрел:

Привязать к DataTable вместо DataReader? Но мне не нужны возможности редактирования.Выбрать каждую строку в структуре данных в памяти? Какую структуру данных я могу использовать? Я не могу использовать анонимные типы, потому что имена и типы столбцов изменяются в зависимости от оператора SQL. Если я используюList<object>Как сетка данных узнает, как генерировать столбцы для каждого объекта в списке?Создать собственный дескриптор типа? Это похоже на излишество.

Но я чувствую, что решение должно быть очень простым и легким. Я что-то упустил здесь?

Ответы на вопрос(2)

Ваш ответ на вопрос