Ich habe eine Schnittstelle namens ICatalog
wie unten gezeigt, wo jeder ICatalog
hat einen Namen und eine Methode, die Elemente basierend auf einer Predicate<Item>
Funktion zurückgibt.Linq basierte generische Alternative zu Prädikat <T>?
Eine bestimmte Implementierung eines Katalogs kann mit Katalogen in verschiedenen Formaten wie XML oder einer SQL-Datenbank verknüpft werden.
Mit einem XML-Katalog schließe ich die gesamte XML-Datei in den Speicher deserialisieren, so dass das Testen jedes Elements mit der Prädikatfunktion nicht viel mehr Overhead hinzufügt, als es bereits im Speicher ist.
Noch mit der SQL-Implementierung würde ich lieber nicht den gesamten Inhalt der Datenbank in den Speicher abrufen und dann die Elemente mit der Prädikatfunktion filtern. Stattdessen möchte ich eine Möglichkeit finden, das Prädikat irgendwie an den SQL-Server zu übergeben oder es irgendwie in eine SQL-Abfrage umzuwandeln.
Dies scheint wie ein Problem, das mit Linq gelöst werden kann, aber ich bin ziemlich neu. Sollte meine Schnittstelle stattdessen IQueryable zurückgeben? Im Moment mache ich mir keine Gedanken darüber, wie ich tatsächlich eine SQL-Version meines ICatalogs implementieren kann. Ich möchte nur sicherstellen, dass meine Schnittstelle es in Zukunft erlauben wird.
Danke für die Antwort Marc. Hört sich komplizierter an, als ich es für das, was ich versuche, gerne hätte. Was meinst du mit einer "klassischen Black Box Repository/Service-Schnittstelle"? Können Sie ein Beispiel geben? –