List<T>
Die Tatsache, dass die Methode Fetch<T>()
eine List<T>
zurückgibt, würde bedeuten, dass sie in Ihrem Codebeispiel
was wahrscheinlich nicht das ist, was Sie wollen, und jedes Wörterbuch würde nur ein Element enthalten, das den ganzen Grund übertrifft, warum Sie überhaupt ein Wörterbuch haben wollen. Wie ich Ihre Frage verstehe, die Sie tatsächlich bekommen möchten:
%Vor% Es gibt natürlich Erweiterungsmethoden für List<T>
, mit denen Sie in andere Typen konvertieren können. Eine solche Methode ist .ToDictionary()
, die Ihr Ergebnis in ein Wörterbuch konvertieren kann, das Sie erhalten möchten.
Nun ist das Problem, das wir hier haben, welcher Typ können wir verwenden mit Fetch
Methode? Zunächst kamen mir zwei Dinge in den Sinn:
Obwohl nette Ideen, würde keiner von ihnen funktionieren, weil Key
-Eigenschaft in KeyValuePair
keinen öffentlichen Setter hat und der zweite keinen parameterlosen Konstruktor hat, den PetaPoco benutzen könnte.
Was wir hier nicht tun, ist, einen benutzerdefinierten Typ ähnlich wie Tuple
zu erstellen, aber mit Funktionalität, die wir tatsächlich mit PetaPoco verwenden können. Lassen Sie uns diesen Typ generisch machen, damit wir ihn mit verschiedenen Typen wiederverwenden können:
Mit dieser benutzerdefinierten Klasse können wir jetzt leicht ein Wörterbuch bekommen:
%Vor% Beachten Sie, dass ich die Reihenfolge der Auswahlfelder umgekehrt habe (und ihnen unterschiedliche Alias-Namen zuweisen), weil Sie nicht möchten, dass die Anzahl der Wörter die Wörter der Wörterbücher sind, sondern die Frage-IDs. Entweder kehren Sie die Reihenfolge der Auswahlfelder um oder stellen korrekte Selektoren für die .ToDictionary()
Erweiterungsmethode bereit.
Ich würde mich für eine dynamische Methode entscheiden:
%Vor%Ein paar Anmerkungen:
Query
anstelle von Fetch
verwendet; Theoretisch sollte es zuerst auf ein List
übergehen und stattdessen die Ergebnisse direkt in das Dictionary
streamen.