Creación dinámica Predicates- pasando de propiedad a una función como parámetro
-
26-09-2019 - |
Pregunta
Estoy tratando de crear predicado dinámico para que pueda ser utilizado en una lista para filtrar
public class Feature
{
public string Color{get;set;}
public string Weight{get;set;}
}
Quiero ser capaz de crear un predicado dinámica para que una lista se puede filtrar. Consigo algunas condiciones que los valores de cadena ">", "<", "> =" etc. ¿Hay una manera en la que puedo hacer esto?
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
}
}
y el uso podría ser:
var filterConditions=GetFilter(x=>x.Weight,100,">=");
¿Cómo definir el getFilter? y cómo crear el predicado dentro de esa?
Solución
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();
}
}
¿Alguna pregunta? : -)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow