Linq-Erweiterungsmethode

7

Ich muss SELECT oft nach Feldern wie publishStart , publishEnd , active

einschränken

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?

    
reinhard 08.01.2013, 17:55
quelle

3 Antworten

13

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:

  1. Eine Basisklasse, die diese Felder implementiert. In diesem Szenario würden Sie YourEntityType durch YourBaseEntityType ersetzen.
  2. Eine Schnittstelle zum Definieren der Felder. In diesem Szenario müssten die Klassen die Felder implementieren. Wenn die Klassen automatisch generiert werden (z. B. Entitätsrahmenmodell / db zuerst), können Sie partielle Klassen implementieren, die die Schnittstelle implementieren. In diesem Fall würden Sie YourEntityType durch IYourContract ersetzen.
Paul Fleming 08.01.2013, 18:01
quelle
4

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.

%Vor%

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%     
Daniel Brückner 08.01.2013 18:02
quelle
3
%Vor%     
I4V 08.01.2013 18:00
quelle