Linq méthode d'extension

J'ai souvent besoin de limiter Sélectionne par les champs comme publishStart, publishEnd, active

J'ai ces champs de plusieurs tables différentes. Donc, seules les lignes doivent être sélectionnés, qui sont

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

Ainsi, par exemple:

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));

C'est un peu long, donc je me demande si il est possible de créer un (extension?)-méthode:

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

où la isActive() offre les 3 lignes de l'extrait ci-dessus.

Comment pourrais-je faire cela?
Est-il une meilleure façon de nettoyer le code?

Ce sont toutes dans des tables distinctes, à droite? Pas un seul tableau est exposé par le contexte? Je demande parce que vous indiquez dans le préambule que les propriétés sont sur des tables séparées, alors que vous utilisez un seul contexte dans le filtre. Si ils sont tous sur la même table, c'est facile, si elles sont sur des tables différentes, il modifie le droit de réponse énormément.
Dans ce cas, vous auriez besoin d'appeler IsActive avant SingleOrDefault de sorte qu'il peut filtrer les éléments actifs avant de vous en prendre qu'un, à moins qu'il n'y a qu'un seul élément avec l'ID.

OriginalL'auteur reinhard | 2013-01-08