Comment étendre un prédicat dans le paramètre d'expression lambda

.net c# expression-trees lambda linq

Question

Je voudrais étendre le paramètre d'expression dans ma méthode pour ajouter mes propres filtres. J'essaie de faire quelque chose comme ci-dessous, mais la syntaxe est fausse:

public static IList<MyPage> DoSomething<T>(Expression<Func<T, bool>> predicate)
{
    return DataStore().GetPages().Where(p => p.PublishDate < DateTime.Now && predicate)
}

Le compilateur se plaint se plaint dans Visual Studio 2012 avec cette erreur:

Erreur 29 L'opérateur '&&' ne peut pas être appliqué aux opérandes de type ' bool ' et ' System.Linq.Expressions.Expression<System.Func<T,bool>> '

Étendre le prédicat serait d’abord mieux que d’alimenter si retour comme .Where(predicate) ? Comment feriez-vous cela?

Réponse acceptée

Étendre le prédicat serait d’abord mieux que d’alimenter si retour comme .Where (prédicat) Comment feriez-vous cela?

Oui, et exactement comme ça, si je comprends bien ce que vous suggérez. Vous pouvez chaîner .Where() comme ceci:

public static IList<MyPage> DoSomething<T>(Expression<Func<T, bool>> predicate)
{
    return DataStore().GetPages().Where(p => p.PublishDate < DateTime.Now).Where(predicate);
}


Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow