Ich frage mich, ob es überhaupt möglich ist, Kreuztabellenergebnisse mit Linq zu erstellen. Ich habe einige Daten, die wie folgt aussehen:
%Vor%und ich versuche, eine Repeater-Steuerung wie folgt auszugeben:
%Vor%Es sind die dynamischen Spalten, die meine Probleme verursachen. Irgendwelche Lösungen dazu?
Du brauchst eine Runtimy-Klasse, um diese Runtimy-Ergebnisse zu halten. Wie wäre es mit xml?
%Vor%Erwarten Sie mehrere Datensätze pro Ergebniszelle? Wenn dies der Fall wäre, müsste etwas Summierung (und mehr Gruppierung) drin sein.
(Diese Antwort ist ein Beweis für das Konzept, nicht das Endergebnis. Es gibt mehrere Probleme, die behoben werden müssen, z. B .: Sortieren von Spalten, fehlende Zellen usw.).
Nach einer kurzen Suche können Sie sich die ModuleBuilder-, TypeBuilder- und FieldBuilder-Klassen in System.Reflection.Emit ansehen. Sie ermöglichen es Ihnen, eine Klasse dynamisch zur Laufzeit zu erstellen. Außerhalb davon müssten Sie Ihre Objekte gruppieren und dann etwas mit den hierarchischen Ergebnissen tun, die Sie von LINQ erhalten. Ich bin mir nicht sicher, wie man anonyme Felder zur Laufzeit dynamisch erstellen kann, und das klingt nach dem, was passieren müsste.
Sie können versuchen, die dynamische linq-Bibliothek von MS zu verwenden. Sie haben eine Anzahl von Überladungen für Erweiterungsmethoden, die Zeichenfolgen als Argumente verwenden. Sie haben auch einen Ausdrucksparser, der eine Zeichenfolge annimmt und einen Lambda-Ausdruck ausgibt. Sie sollten in der Lage sein, eine dynamische Auswahl mit ihnen zu erstellen.
Ein Wort der Warnung, aber Sie am Ende mit einem nicht-generischen IQueryable statt einer generischen IQueryable, so dass Sie ein wenig eingeschränkt sind, was Sie mit dem Ergebnis tun können, und Sie geben ein wenig Typ Sicherheit, aber das kann in deiner Anwendung OK sein ...
Der Link für das dynamische linq Zeug ist
Es gibt einen Link, über den Sie den Quellcode der dynamischen Bibliothek herunterladen können, sowie einige schöne Illustrationen, wie Sie sie verwenden können.