Création dynamique Predicates- passage dans la propriété à une fonction en tant que paramètre
-
26-09-2019 - |
Question
Je suis en train de créer prédicats dynamique afin qu'il puisse être utilisé contre une liste pour filtrer
public class Feature
{
public string Color{get;set;}
public string Weight{get;set;}
}
Je veux être en mesure de créer un prédicat dynamique afin qu'une liste peut être filtrée. Je reçois quelques conditions que les valeurs de chaîne « > », « < », « > = » etc. Y at-il un moyen par lequel je peux le faire?
public Predicate<Feature> GetFilter(X property,T value, string condition) //no clue what X will be
{
switch(condition)
{
case ">=":
return new Predicate<Feature>(property >= value)//or something similar
}
}
et l'utilisation pourrait être:
var filterConditions=GetFilter(x=>x.Weight,100,">=");
Comment l'GetFilter doit être défini? et comment créer le prédicat intérieur qui?
La solution
public Predicate<Feature> GetFilter<T>(
Expression<Func<Feature, T>> property,
T value,
string condition)
{
switch (condition)
{
case ">=":
return
Expression.Lambda<Predicate<Feature>>(
Expression.GreaterThanOrEqual(
property.Body,
Expression.Constant(value)
),
property.Parameters
).Compile();
default:
throw new NotSupportedException();
}
}
Des questions? : -)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow