Помощь с запросом LINQ to DataTable - PullRequest
0 голосов
/ 29 декабря 2010

Я успешно использовал OLEDB для импорта файла Excel в таблицу данных и отображения его в виде таблицы данных. Теперь я хочу использовать LINQ и установить источник данных для сетки в качестве запроса LINQ, однако он не работает. Вот полный код:

OleDbConnection conn = new OleDbConnection();
conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Nick\Desktop\Pricing2.xlsx" + @";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1;ImportMixedTypes=Text;TypeGuessRows=0""";

OleDbCommand command = new OleDbCommand
(
    "SELECT * FROM [Pricing$]",conn
);
DataTable dt = new DataTable();
OleDbDataAdapter adapter = new OleDbDataAdapter(command);
adapter.Fill(dt);
var query = from a in dt.AsEnumerable()
            select a;
dataGridView1.DataSource = query; 

Ответы [ 2 ]

1 голос
/ 29 декабря 2010

Привязка данных работает с IList с, а не IEnumerable с.

Чтобы связать запрос LINQ, вам нужно позвонить ToList().
Чтобы связать запрос LINQ-to-DataTable (запрос LINQ, который возвращает DataRow с), вам нужно вызвать AsDataView() вместо .
Это возвращает реализацию ITypedList, которая покажет свойства для столбцов в таблице.

Если вы выбираете анонимный тип (не DataRow), вам просто нужно ToList().

0 голосов
/ 29 декабря 2010

.ToList() не будет работать, .CopyToDataTable() - правильный вызов.

...