Zum Inhalt, überspringe Kopfzeile Zur Navigation, überspringe Kopfzeile
Seit C# 3.0 kann man ja via LINQ eine Datenbank abfragen. Eine schöne Sache. Ab und zu, für bestimmte Zwecke, benötigt man aber immer noch die Ergebnisse als klassische DataTable. Wie wandelt man nun das Ergebnis einer LINQ-Abfrage in eine DataTable um?
Hier die LINQ-Abfrage die mir mein Adressbuch ausliest:
DataContext context = new DataContext(); var query = from s in context.Personen orderby s.Nachname select s;
Die Datensätze hat man nun in query. Man könnte jetzt nun mit foreach jeden einzelnen Datensatz abfragen und in eine DataTable ablegen. Es geht aber noch etwas einfacher:
using System; using System.Data; using System.Data.SqlClient; using System.Linq; /// <summary> /// Ergebnis einer LINQ-Abfrage in eine DataTable umwandeln. /// </summary> /// <param name="query">Abfrageergebnis</param> /// <param name="context">Context</param> /// <returns>Tabelle</returns> public DataTable ConvertLinqToDatatable( IQueryable query, DataContext context ) { DataTable table = null; IDbCommand cmd = null; SqlDataAdapter adapter = null; try { // LINQ-Abfrage in Tabelle speichern cmd = context.GetCommand( query ); adapter = new SqlDataAdapter(); adapter.SelectCommand = (SqlCommand)cmd; table = new DataTable(); cmd.Connection.Open(); adapter.FillSchema( table, SchemaType.Source ); adapter.Fill( table ); return table; } catch { throw; } finally { if ( table != null ) table.Dispose(); if ( adapter != null ) adapter.Dispose(); if ( cmd != null ) { cmd.Connection.Close(); cmd.Dispose(); } } }
Somit einfach wie gewohnt eine LINQ-Abfrage durchführen und dann das Ergbnis mit der Funktion ConvertLinqToDatatable() umwandeln lassen:
DataContext context = new DataContext(); var query = from s in context.Personen orderby s.Nachname select s; DataTable = ConvertLinqToDatatable( query, context );
Zum Inhalt zurück, überspringe Navigation | Zum Seitenanfang