2017-03-02 4 views
2

Ich möchte meine Modelldaten zu DataSet oder DataTable konvertieren (in Excel-Format zu exportieren)Export Modell zu Datatable

db.EMPs.ToList() 

dbDataContext ist, EMPsdataclass ist.

Wie diese Liste DataTable exportieren, kann ich Zeilen Excel-Export, aber wie Spaltennamen für den Zugriff auf von Header (Spaltennamen manuell in DataTable nicht hinzugefügt werden sollen)

Antwort

4

Sie ToDataTable Extension-Methode verwenden, können Sie aber müssen zuerst MoreLinq installieren. So installieren Sie MoreLINQ, führen Sie den folgenden Befehl in dem Package Manager Console:

PM> Install-Package morelinq

dann die folgende Zeile in using Richtlinien hinzufügen:

using MoreLinq; 

Und Schließlich können Sie ToDataTable Erweiterungsmethode verwenden:

DataTable s = db.EMPs.ToDataTable(); 
1

Um schnell eine Datei zu erstellen, die in Excel gelesen werden kann, können Sie den Inhalt mit LINQ in eine durch Kommas getrennte Werteliste mappen und dann das Array in einem Dateistrom speichern.

var records = db.EMP 
       .ToList() 
       .Select(record => $"\"{record.stringField}\",{record.numberField}") 
       .ToArray(); 
File.WriteAllLines("file.csv", records); 
+0

Was bedeutet Stringfield und Number bedeutet hier? – Saurabh

+0

Es zeigt
LINQ to Entities erkennt die Methode 'System.String Format (System.String, System.Object, System.Object)' Methode nicht, und diese Methode kann nicht in einen Ausdruck Speicher übersetzt werden. – Saurabh

+0

Es sollten Felder in Ihrer Tabelle angezeigt werden, die Strings oder Zahlen sind. Zeichenfolgen können in Anführungszeichen eingeschlossen werden, um das Lesen durch Excel zu erleichtern. –

0

Mit MoreLinq ist der beste Weg, um eine Klasse zu DataTable wie bereits beantwortet von S.Akbari konvertieren Im Folgenden eine andere Art, wie ich diese System.Reflection unter Verwendung erreichen gefunden

List<EMP> list= db.EMPs.ToList(); 
DataTable dt = new DataTable();  
PropertyInfo[] Props = typeof(EMP).GetProperties(BindingFlags.Public | BindingFlags.Instance); 
foreach (PropertyInfo prop in Props) 
{ 
    //Setting column names as Property names 
    dt.Columns.Add(prop.Name); 
} 

foreach (EMP e in list) 
{ 
    var values = new object[Props.Length]; 
    for (int i = 0; i < Props.Length; i++) 
    { 
     //inserting property values to datatable rows 
     values[i] = Props[i].GetValue(e, null); 
    } 
    dt.Rows.Add(values); 
}