Zuordnung zur Sammlung in PetaPoco?

8

Gibt es eine Möglichkeit, dem Dictionary<int,int> Folgendes zuzuordnen? Es scheint, dass es Zeilen für so viele zurückgegebene Ergebnisse gibt, die es gibt, aber sie haben keine Werte ...

%Vor%     
chobo 30.11.2012, 00:55
quelle

2 Antworten

15

Fetch liefert immer eine List<T>

Die Tatsache, dass die Methode Fetch<T>() eine List<T> zurückgibt, würde bedeuten, dass sie in Ihrem Codebeispiel

zurückgibt %Vor%

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.

Erste Ideen

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:

%Vor%

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.

Lösung

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:

%Vor%

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.

    
Robert Koritnik 30.11.2012, 13:20
quelle
1

Ich würde mich für eine dynamische Methode entscheiden:

%Vor%

Ein paar Anmerkungen:

  • Sie müssen den Bereich aus der Spalte "Anzahl der Antworten" löschen und mit "AnswerCount" fortfahren, damit dies funktioniert.
  • Ich habe aus Leistungsgründen Query anstelle von Fetch verwendet; Theoretisch sollte es zuerst auf ein List übergehen und stattdessen die Ergebnisse direkt in das Dictionary streamen.
Todd Menier 09.03.2014 22:05
quelle

Tags und Links