Dynamique de la clause where dans LINQ - avec les noms de colonnes disponibles au moment de l'exécution

Avertissement: j'ai résolu le problème en utilisant des Expressions à partir du Système.Linq.Expressions, mais je suis toujours à la recherche d'un mieux/plus facile.

Considérons la situation suivante :

var query = 
    from c in db.Customers
    where (c.ContactFirstName.Contains("BlackListed") || 
           c.ContactLastName.Contains("BlackListed")  ||
           c.Address.Contains("BlackListed"))
    select c;

Les colonnes/attributs qui doivent être vérifiés par rapport à la liste noire terme ne sont disponibles que pour moi au moment de l'exécution. Comment puis-je générer cette dynamique clause where?

Une complication supplémentaire est que le Queryable collection (db.Les clients ci-dessus) est tapé un Queryable de la classe de base de "Client" (dire "Personne"), et donc de l'écriture c.Adresse que ci-dessus n'est pas une option.

Je serais curieux de voir vos Expressions solution, aucune chance de les ajouter à votre réponse? Des acclamations.
Voir ce question et mon ultérieure réponse concernant la dynamique des requêtes LINQ

OriginalL'auteur sandesh247 | 2008-10-24