Bestücken Sie Excel mit Daten von LINQ to SQL-Abfrage
Frage
Ich versuche, einige Daten aus einer LINQ-Abfrage in C # in ein Excel-Geschwindigkeit Blatt zu senden mit OLE
Ich habe eine Abfrage wie folgt:
Var data = from d in db.{MyTable}
where d.Name = "Test"
select d;
ich das Excel OLE-Objekt habe gut funktioniert, ich kann einfach nicht herausfinden, wie mit den Daten aus der LINQ-Abfrage, die Zellen in Excel zu füllen.
. PS: Ich verwende Excel 2003, wenn das einen Unterschied macht
Kann mir jemand helfen mit diesem?
Lösung
Senden von einzelnen OLE-Befehle für jede Excel-Zelle ist sehr langsam, so ist der Schlüssel ein Objekt Array wie folgt zu erstellen:
int noOfRows = data.Count - 1;
int noOfColumns = mydataclass.GetType().GetProperties().Count() - 1;
Object[noOfRows, noOfColumns] myArray;
ein Objekt Array Senden können Sie eine Mischung von Datentypen senden z.B. string, integer, Datum etc. Wenn Sie jedoch wissen, dass die Daten alle Text ist zum Beispiel, kann man einfach ein String-Array senden.
Das Array muss aus der Abfrage gefüllt werden entweder durch jeden einzelnen Wert zuweisen oder vielleicht durch Reflexion unter Verwendung der Daten Objekteigenschaften zu erhalten. Dann können Sie das Array in Excel wie folgt an:
XLOLESheetobj.Range("A1","Z20").Value = myArray;
Sie können Z20 ersetzen mit der Anzahl der Spalten -> Char + die Anzahl der Zeilen -> string.
Andere Tipps
Ich nehme an, Sie verwenden OLE nicht in einem Web-Szenario, denn es wird schließlich scheitern.
Wenn Sie nur Rohdaten benötigen, können Sie auf tabulatorbegrenzter Textdatei Dump kann:
var lines = data.Select (d => d.Name + '\ t' + d.AnotherProperty + ...);
Ihre beste Möglichkeit ist, mit dem Excel XML-Format. Ich habe eine Blog-Post auf, wie das erreichen: http: //www.aaron -powell.com/blog.aspx?id=1237
Sie sind andere Option wäre am LINQ-Anbieter für Excel suchen - http: //www.codeplex. com / xlslinq .