Ich habe eine Datenbank mit etwa 100 oder so Tabelle. Was ich versuche zu tun, ist folgendes:Dynamische Popup generische Liste von Objekten ohne konkreten Datentyp
- Holen Sie sich eine Liste der Tabellen in der Datenbank.
- Durchlaufen Sie jede Tabelle in der Liste und wählen Sie alle Datensätze in der Tabelle in eine Datentabelle aus.
- Erstellen Sie für jede Datentabelle dynamisch eine allgemeine Liste von POCO-Klassen
- Lesen Sie jede Datenzeile und füllen Sie das Objekt, und fügen Sie es dann der Liste hinzu.
Ich bin durch Punkte 1 und 2 in Ordnung. Aber für die Punkte 3 und 4 habe ich Probleme. Hier ist der Code, ich habe:
Type type = Type.GetType(tableName);
var list = Utility.BindList<type>(dataTable);
Die Ausnahme, die ich bekommen ist: „‚Typ‘eine Variable ist aber wie ein Typ verwendet wird“
Und darüber nachzudenken, macht es Sinn. Natürlich, wenn ich die eigentliche Klasse statt Typ eingeben funktioniert es gut:
Type type = Type.GetType(tableName);
var list = Utility.BindList<Person>(dataTable);
Aber ich will keine tatsächlichen Klassen hart Code haben. By the way, hier die Unterschrift der BindList Methode, die ich oben nenne (dieser Teil funktioniert gut):
public static List<T> BindList<T>(DataTable dt)
{
// Turn Data Table into Generic List
return list
}
Hat jemand irgendwelche Vorschläge, wie dies zu tun?
Danke!
Update: Die Lösung wurde wie folgt durch Tyress vorgesehen:
Type type = Assembly.Load("[NAMESPACE PATH]").GetTypes().First(t => t.Name == tableName);
var method = typeof(Utility).GetMethod("BindList").MakeGenericMethod(type);
var bindResult = method.Invoke(null, new[] { datatable });
Mögliche Duplikat [Generics in C#, Typ einer Variablen als Parameter verwendet] (https://stackoverflow.com/questions/2107845/Generics-in-c-using-Typ-einer-Variable-als-Parameter) –
Eigentlich ist dies ein anderes Problem. Was ich versuche, ist, einen konkreten Datentyp von benutzerdefinierten Klassen in eine generische Funktion einzubringen. –
Nein ist es nicht. Sie haben keinen konkreten Datentyp. Sie haben nur einen Typ, der zur Laufzeit bekannt ist (Sie haben ihn selbst in Ihren Fragetitel geschrieben) –