Ho bisogno di memorizzare i dati restituiti da questo LINQ alla query Entities (sotto) in un DataTable in modo che possa utilizzarlo come origine dati per un DataGridView, come posso farlo?LINQ alle entità query a DataTable
In questo caso sto utilizzando LINQ alle entità per eseguire una query su un modello concettuale Entity Framework, quindi db
è una classe che eredita da 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;
}
Ho provato a farlo (sotto), ma genera un'eccezione durante l'esecuzione [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]: Eccezione: InvalidCastException
Unable to cast object of type 'WhereEnumerableIterator`1[Projeto_TCC.Models.Vendedor]' to type 'System.Collections.Generic.IEnumerable`1[System.Data.DataRow]'.
Grazie in anticipo
Il metodo CopyToDataTable non sarà disponibile in 'query' se lo utilizzo in questo modo. Si noti che sto utilizzando Entity Framework. – Zignd
Ho fatto un refuso sull'ultima fonte e, come dice la modifica, il metodo CopyToDataTable dovrebbe funzionare lì. btw - La risposta è stata di aiuto? –
Come puoi vedere nello stesso link, per accedere al metodo CopyToDataTable il tipo T nell'Enumerable deve essere di tipo DataRow, ma come invece hai usato la classe che rappresenta la tabella del database Vendedor I non ha accesso a quei metodi di estensione che include CopyToDataTable. –
Zignd