Ich muss SELECT oft nach Feldern wie publishStart
, publishEnd
, active
Ich habe diese Felder in verschiedenen Tabellen. Daher sollten nur Zeilen ausgewählt werden, die
sind %Vor%Also zum Beispiel:
%Vor%Das ist ein bisschen langwierig, also frage ich mich, ob es möglich ist, eine (Erweiterung?) - Methode wie:
zu erstellen %Vor% wobei isActive()
die 3 Zeilen des obigen Snippets liefert.
Wie könnte ich das tun? Gibt es eine bessere Möglichkeit, Code aufzuräumen?
Um eine Erweiterung zu definieren, benötigen Sie eine statische Klasse. Sie können dies in den gewünschten Namespace einfügen, denken Sie daran, es in Ihre Verwendung aufzunehmen.
%Vor% Beachte YourEntityType
drin. Dies wird verwendet, um sicherzustellen, dass die Methode die Existenz von publishStart
, publishEnd
und active
kennt. Dies sollte entweder die Klasse sein, die diese Felder implementiert, oder ein Vertrag (Schnittstelle), der sie definiert.
Sie würden das dann so nennen:
%Vor%Mehr über Erweiterungsmethoden hier: Ссылка
Da viele Kommentare überall auftauchen, werde ich hier eine kurze Erklärung der Schnittstellenlösung hinzufügen ...
Es ist unklar in der Frage, ob es eine gemeinsame Implementierung für die drei gefilterten Felder oder eine Schnittstelle gibt, um sie zu definieren. Wenn nicht, funktioniert das obige auch nicht:
YourEntityType
durch YourBaseEntityType
ersetzen. YourEntityType
durch IYourContract
ersetzen. Definieren Sie einfach eine solche Schnittstelle
%Vor%und fügen Sie es allen relevanten Klassen hinzu.
%Vor%Jetzt können Sie diese Erweiterungsmethode verwenden
%Vor% für jede Instanz, die IHaveAActivityPeriod
implementiert.
Ich habe die Möglichkeit, eine Erweiterungsmethode zu konstruieren, die die Filterung einer Sequenz durchführt, statt eine einzelne Entität auf einmal zu betrachten, völlig verpasst. Nehmen Sie einfach die Erweiterungsmethode von Flem 's an und werfen Sie einen Sprung in die Schnittstelle als Typbeschränkung.
%Vor%Tags und Links c# linq linq-to-sql extension-methods