In MVC 4 und EF 5 möchte ich eine dynamische Abfrage ausführen.
%Vor%Ich weiß nicht, wie viele Felder es zurückgeben und benennen wird. Aus diesem Ergebnis möchte ich eine Tabellenstruktur erstellen, die in der Ansicht angezeigt wird.
Frage: Was sollte ich als Typ übergeben?
Meine Abfrage gibt das Ergebnis zurück:
Feld 1, Feld 2, Feld 3, Feld 4, Feld 5
Zeile1 ...
Row2 ..
Schätzen Sie jeden Vorschlag.
Schließlich habe ich die TypeBuilder-Option verwendet, die von "Mortalus" und dem ExpandoObject-Objekt vorgeschlagen wird. Es hat gerade einen geringen Leistungsaufwand.
Nehmen Sie den Typebuilder-Code von "Mortalus" an, dann habe ich Code gemäß meiner Anforderung wie folgt erstellt.
%Vor%Nun habe ich das "Dictionary" -Objekt vom dynamischen Objekt. und verwenden Sie es können Sie leicht zur Design-Zeit arbeiten, anstatt warten bis zur Laufzeit mit "dynamischen" Objekt.
Sie könnten eine rohe SQL-Abfrage verwenden, weil EF dies nicht unterstützt:
%Vor%und dann:
%Vor%und schließlich aus Ihrer Sicht:
%Vor%Diese Methode lädt Daten aus der SQL-Auswahl (mit Parametern) in die Liste der Zeilen, wobei jede Zeile das Wörterbuch der Spalten ist (der Schlüssel ist der Spaltenname).
%Vor%Ohne etwas über den Typ zu wissen, der zurückgegeben wird, denke ich, dass Sie Pech haben könnten.
Wenn Sie wissen, unter welche Muster es fallen könnte, könnten Sie einige try { } catch () { }
's auf Interfaces verwenden, die mit diesen Parametern in Ihrer ansonsten dynamischen Abfrage übereinstimmen, aber das scheint ein wenig schmerzhaft zu sein.
Leider wird EF Objekte erst dann realisieren, wenn sie ihre Type
kennen.
Wenn das wirklich notwendig für Sie ist, würde ich Ihnen empfehlen, auf ADO.NET
und DataTable
zurückzugreifen.
Ich bin kürzlich auf dieses Beispiel gestoßen:
Ich hatte nicht die Zeit, es selbst zu testen, aber es scheint, dass es mit etwas zusätzlicher Arbeit möglich ist, den dynamischen Typ zu konstruieren.
Kurz gesagt, Sie möchten so etwas tun:
%Vor% Wo TypeBuilder
detailliert in dem Beitrag beschrieben ist, den ich angehängt habe.
Hinzufügen zu Petr Voborníks Antwort, dynamische Abfrage, ich füge dynamische Einfügung von ResultSet, meine Anwendung nimmt die dynamische Abfrage aller Tabellen der gesamten Datenbank, ein Stück nach dem anderen und fügt dann die dynamischen Ergebnisse in eine entfernte Datenbank ein Immer verschlüsselt (hier nicht aufgeführt). Übergeben eines SB-Befehls- und Parameterobjekts.
%Vor%Tags und Links asp.net-mvc-3 c# entity-framework asp.net-mvc-4