Dynamische Objektgenerierung mit ExpandoObject

Inhalt

Ich musste eine Excel-Datei mit eigenen definierten Spalten in eine neue mit dynamischen Spalten konvertieren, und war etwas verwirrt, wie man es ohne ernsthafte Leistungsprobleme richtig macht.

Ich bin zu einem Tutorial gekommen, das Sie finden können hier mit .NET ExpandoObject was es Ihnen praktisch ermöglicht, ein Objekt zu erstellen und dynamische Mitglieder hinzuzufügen.

ExpandoObject

Microsofts Definition ist:

Stellt ein Objekt dar, dessen Mitglieder zur Laufzeit dynamisch hinzugefügt und gelöscht werden können.

Und du hast einige Beobachtungen:

Die ExpandoObject-Klasse ermöglicht Ihnen das Hinzufügen und Löschen von Mitgliedern Ihrer Instanzen zur Laufzeit, und auch Werte für diese Mitglieder ermitteln und erhalten. Diese Klasse unterstützt dynamische Links, wodurch Sie eine Standardsyntax wie sampleObject.sampleMember anstelle einer komplexeren Syntax wie sampleObject.GetAttribute verwenden können (“BeispielMitglied”).

Aktuelles Verhalten

Wir haben einen ExcelExportServiceque, beim Passieren von a Aufführen , für diesen Fall ExcelItem, wir werden es benutzen Reflexion a erstellen xlsx Archiv.

Bis jetzt, unser Code sieht so aus:

emi20120ok-8070408

ExcelItem ist das Objekt mit allen Eigenschaften, die zur Generierung der Excel-Datei verwendet werden.

emi2022OK-8449352

Dieser Ansatz funktioniert super, die xlsx-Datei wird ohne Probleme generiert und jede Spalte ist jede Eigenschaft, ich würde das verwenden ExcelBytes abrufen Methode wie diese, als Beispiel, um es in einer Datei zu speichern:

emi20320ok-6114359

Das Problem

Denn was wir gut machen, ist die Nutzung aller Eigenschaften der ExcelItem Objekt, alles was ich will ist sie nicht alle zu benutzen, benutz einfach 2 Ö 3 von ihnen.

Es ist auch eine Voraussetzung, dass Sie den Code nicht ändern möchten, alles muss von der gemacht werden Administrator die entscheidet, welche Spalten angezeigt werden sollen und die Eigenschaften des Codes kennt oder nicht.

TLDR: alles muss dynamisch sein, Wir haben ein Objekt mit Eigenschaften und müssen sicherstellen, dass die generierte Datei Norden Eigenschaften dieses Objekts, aber anscheinend ist es nicht codiert.

Dynamische Spalten

Die Änderung wäre die Verwendung von a dynamisch Objekt, weil wir bestimmen möchten, welche Eigenschaften des Objekts verwendet werden, um die Spaltenliste zu generieren.

Nehmen wir an, wir haben ein Objekt mit vielen Eigenschaften, Was Tonne von ihnen, und das wollen wir wirklich nicht ändern ExcelItem widersprechen Sie jedes Mal, wenn wir eine Änderung vornehmen, wir haben ein erstellt SpalteExcelItem Tisch, die verwendet werden, um das zu generieren ExcelItem.

Datenbankstruktur

Wir speichern diese Definition in unserer Datenbank mit so etwas:

emi20520ok-5435136

Beachten Sie, dass wir weniger Werte haben als die vorhandenen Eigenschaften der ExcelItem Objekt, seit es hat 6 Eigenschaften und wir haben nur 3 in die Datenbank aufgenommen.

Beachten Sie auch, dass Name des Anwesens Es muss mit dem Eigenschaftsnamen des Objekts übereinstimmen, das ich für die dynamische Zuordnung verwenden werde.

Bau des Objekts

Jetzt haben wir die Datenbanktabelle, Wir müssen das Repository erstellen, um das zu erhalten und sie im Code verwenden zu können.

Ich werde kein Tutorial für diesen Teil machen, Ich werde zum Anfang des neuen springen. ExcelBytes abrufen () Funktion.

emi20620ok-8578126

Jetzt müssen wir ein Objekt mit einigen der Eigenschaften von . erstellen ExcelItem, aber total dynamisch. Anstatt die 6 Eigenschaften, wir verwenden nur 3 von ihnen, die, die wir nur senden wollen.

Jetzt stell dir das vor ExcelItem das objekt hat 200 Eigenschaften, genervt, aber es könnte passieren.

Das einzige, was ich tun muss, ist die Eigenschaften einzufügen, die ich in der Excel-Datei rendern möchte SpalteExcelItem Tisch und das wars.

Fälle

Unter diesen Umständen, Wir verwenden nur einen einzigen Fall, aber nehmen wir an, Sie möchten für einige Benutzer andere Berichte haben. Sagen wir, dass die Management Rolle sollte alle Eigenschaften erhalten, dann würde ich sowas wie diese struktur in der datenbank anlegen.

emi20720ok-1815905

emi20820ok-6937663

Anschließend, wenn ich die vorlage bekomme, könnte verschiedene Spalten haben, alles dynamisch und ohne zugehörigen Code.

Wenn wir einen Benutzer mit der Rolle haben Administratoren, die Datei enthält Spalten gehen, Kartoffel, Familienname, Nachname, Alter, Erstellt in, Aktualisiert in.

Für den Fall, dass wir mit dem Benutzer Papier, was wird es haben Kartoffel, Alter. Familienname, Nachname.

Fazit

Dies ist eine großartige Möglichkeit zu lernen dynamisch funktioniert in .NET und ist eine sehr gute Lösung, wenn Sie verschiedene Rollen oder Vorlagen für verschiedene Benutzer benötigen und nicht wirklich daran interessiert sind, Zeit mit dem Programmieren zu verbringen.

Abonniere unseren Newsletter

Wir senden Ihnen keine SPAM-Mail. Wir hassen es genauso wie du.