.NET Framework construire un prédicat de champ de formulaire == valeur


Exemple

Pour construire une expression comme _ => _.Field == "VALUE" à l'exécution.

Étant donné un prédicat _ => _.Field et une valeur de chaîne "VALUE" , créez une expression qui vérifie si le prédicat est vrai ou non.

L'expression convient pour:

  • IQueryable<T> , IEnumerable<T> pour tester le prédicat.
  • framework d'entité ou Linq to SQL pour créer une clause Where qui teste le prédicat.

Cette méthode va générer une expression Equal appropriée qui teste si Field est égal ou non à "VALUE" .

public static Expression<Func<T, bool>> BuildEqualPredicate<T>(
    Expression<Func<T, string>> memberAccessor,
    string term)
{
    var toString = Expression.Convert(Expression.Constant(term), typeof(string));
    Expression expression = Expression.Equal(memberAccessor.Body, toString);
    var predicate = Expression.Lambda<Func<T, bool>>(
        expression,
        memberAccessor.Parameters);
    return predicate;
}

Le prédicat peut être utilisé en incluant le prédicat dans une méthode d'extension Where .

var predicate = PredicateExtensions.BuildEqualPredicate<Entity>(
    _ => _.Field,
    "VALUE");
var results = context.Entity.Where(predicate).ToList();