Linq-extension-Methode

Ich Häufig zu begrenzen Wählt durch Felder wie publishStart, publishEnd, active

Habe ich diese Felder in verschiedenen Tabellen. So werden nur die Zeilen ausgewählt werden sollte, sind

a: active == true;
b: publishStart < now;
c: publishEnd > now;

So, zum Beispiel:

db.myTable.SingleOrDefault(a => (a.ID == _theID 
          //now the active and start-end part:            
                      && ((a.publishEnd > DateTime.Now) || (a.publishEnd == null))
                      && ((a.publishStart <= DateTime.Now) || (a.publishStart == null))
                      && a.active == true));

Dies ist etwas langatmig, so dass ich Frage mich, ob es möglich ist, zu erstellen (Erweiterung?)-Methode wie:

db.myTable.SingleOrDefault(a => (a.ID == _theID).isActive()

wo die isActive() bietet die 3 Zeilen in der obigen Schnipsel.

Wie könnte ich dies tun?
Gibt es einen besseren Weg, um clean-up-code?

  • Diese sind alle in separaten Tabellen, richtig? Nicht eine einzige Tabelle, die ausgesetzt ist, die durch den Kontext? Ich Frage, weil Sie angeben, in der Präambel, dass die Eigenschaften sind auf separaten Tabellen, die bei der Verwendung von nur einem Kontext in den filter. Wenn Sie alle auf die gleiche Tabelle, es ist einfach, wenn Sie sich auf unterschiedlichen Tabellen, verändert Sie die richtige Antwort ungemein.
  • In diesem Fall würden Sie benötigen, rufen Sie IsActive vor SingleOrDefault so dass Sie können filter der aktiven Elemente, bevor Sie nur eine, es sei denn, es ist immer nur ein Element mit der entsprechenden ID.
InformationsquelleAutor reinhard | 2013-01-08
Schreibe einen Kommentar