Ich muss die Daten von dieser Abfrage LINQ to Entities (unten) in eine DataTable speichern, so dass ich es als Datenquelle zu einem DataGridView verwenden kann, wie kann ich das tun?LINQ zu Entities Abfrage zu DataTable
In diesem Fall verwende ich LINQ zu Entities, um gegen ein konzeptionelles Modell von Entity Framework abzufragen, also db
ist eine Klasse, die von System.Data.Entity.DbContext
erbt.
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;
}
Ich habe versucht, dies zu tun (unten), aber es wirft eine Ausnahme während der Ausführung [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]: Ausnahme: InvalidCastException
Unable to cast object of type 'WhereEnumerableIterator`1[Projeto_TCC.Models.Vendedor]' to type 'System.Collections.Generic.IEnumerable`1[System.Data.DataRow]'.
Vielen Dank im Voraus
Die Methode CopyToDataTable ist in der 'query' nicht verfügbar, wenn ich sie so verwende. Bitte beachten Sie, dass ich Entity Framework verwende. – Zignd
Ich habe einen Tippfehler bei der letzten Quelle gemacht, und wie die Änderung sagt, sollte die CopyToDataTable Methode dort arbeiten. BTW: Hat die Antwort überhaupt geholfen? –
Wie Sie im selben Link sehen können, muss der Typ T in der IEnumerable vom Typ DataRow sein, um Zugriff auf die CopyToDataTable-Methode zu erhalten, aber stattdessen haben Sie die Klasse verwendet, die die Datenbanktabelle Vendedor darstellt diese Erweiterungsmethoden, die die CopyToDataTable enthält. –
Zignd