Ich versuche ein Wörterbuch vorzubereiten, das COLUMN_NAME
als Schlüssel und {IS_NULLABLE, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH}
als Wert enthält.C# LINQ Dictionary von anonymen Werten
Das habe ich bisher gemacht.
Dictionary<string, object> dict = new Dictionary<string, object>();
var dt = GetDataTable($"SELECT COLUMN_NAME, IS_NULLABLE, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='{tableName}'");
if (dt != null)
{
dict = dt.AsEnumerable().ToDictionary(row => row.Field<string>(0), row => new { IS_NULLABLE = row.Field<bool>(1), DATA_TYPE = row.Field<string>(2), CHARACTER_MAXIMUM_LENGTH = row.Field<int>(3) });
}
GetDataTable
Funktion, die hier nicht aufgeführt sind, funktioniert gut und gibt mir eine gültige System.Data.DataTable
.
Compiler wirft ...
Fehler CS0029: Kann nicht implizit konvertiert Typ 'System.Collections.Generic.Dictionary>' auf 'System.Collections.Generic.Dictionary'
Frage ist , Wie erzeuge ich ein anonymes Objekt mit diesen Eigenschaften - IS_NULLABLE
, DATA_TYPE
, CHARACTER_MAXIMUM_LENGTH
?
Warum erstellen Sie nicht stattdessen eine Klasse 'DbColumn'? Dann ist Ihr Wörterbuch ein 'Dictionary' –
Ja, das ist einfach zu beheben. Ich kenne. Aber ich möchte dies mit anonymen Typen erreichen. – user1
Warum? Das ist nicht nur eine Lösung, es ist ein viel besserer Ansatz, da Sie dieses Wörterbuch als Feld in einer Klasse verwenden oder als Argument übergeben können. Sie können es später auch erweitern oder Methoden bereitstellen. Sie haben auch kompilierte Zeit Sicherheit und können auf die Eigenschaften zugreifen, ohne sie im Gegensatz zu "Objekt" zu werfen. –