Мне нужно сохранить данные, возвращенные из этого запроса LINQ to Entities (ниже) в DataTable, чтобы я мог использовать его в качестве источника данных для DataGridView, как я могу это сделать?Запрос LINQ to Entities к DataTable
В этом случае я использую LINQ to Entities для запроса концептуальной модели Entity Framework, поэтому db
- это класс, который наследует от System.Data.Entity.DbContext
.
using (TccContext db = new TccContext())
{
var query = from vendedor in db.Vendedores.AsEnumerable()
where vendedor.codigo == Convert.ToInt32(textBoxPesquisa.Text)
select vendedor;
// I'd like to do something like DataTable dt = query;
}
Я попытался сделать это (см. Ниже), но он выдает исключение во время выполнения [1].
using (TccContext db = new TccContext())
{
IEnumerable<DataRow> query = (IEnumerable<DataRow>)(from vendedor in db.Vendedores.AsEnumerable()
where vendedor.codigo == Convert.ToInt32(textBoxPesquisa.Text)
select vendedor);
using (DataTable dt = query.CopyToDataTable<DataRow>())
{
this.dataGridViewProcura.Rows.Add(
dt.Rows[0][0], // Código
dt.Rows[0][1], // Nome
dt.Rows[0][2]); // Venda Mensal
}
}
[1]: Исключение: InvalidCastException
Unable to cast object of type 'WhereEnumerableIterator`1[Projeto_TCC.Models.Vendedor]' to type 'System.Collections.Generic.IEnumerable`1[System.Data.DataRow]'.
Заранее спасибо
Метод CopyToDataTable не будет доступен в 'query', если я его так использую. Обратите внимание, что я использую Entity Framework. – Zignd
Я сделал опечатку на последнем источнике, и, как говорится в редакции, метод CopyToDataTable должен работать там. Кстати, ответил ли ответ? –
Как вы можете видеть в той же ссылке, чтобы получить доступ к методу CopyToDataTable, тип T в IEnumerable должен иметь тип DataRow, но вместо этого вы использовали класс, который представляет таблицу базы данных. Vendor I в конечном итоге не имеет доступа к те методы расширения, которые включают CopyToDataTable. –
Zignd