J'ai créé une fonction générique d'expression lambda comme ci-dessous.
J'essaie de créer une requête de filtre dynamique.
comment appliquer la méthode string.contains dans l'expression générique lambda
public Expression<Func<TSource, bool>> GenericExpression<TSource>(string propertyName, string searchTerm)
{
//x=>x.Name.Contains("Emre");
var parameter = Expression.Parameter(typeof(TSource), "x");
var property = Expression.Property(parameter,propertyName);
var search = Expression.Constant(searchTerm,typeof(string));
MethodInfo method = typeof(string).GetMethod("Contains", new[] { typeof(string) });
var containsMethodExp = Expression.Call(property, method, search);
return Expression.Lambda<Func<TSource, bool>>(containsMethodExp, parameter);
}
je reçois une erreur lorsque la fonction de GenericExpression d'appel. Le message d'erreur indique que:
Méthode 'Boolean Contient (System.String)' a déclaré le type 'System.String' ne peut pas être appelé par exemple de type 'System.Int32'
I ne comprends pas les détails de l'erreur.
Pourriez-vous s'il vous plaît expliquer
Merci
Il semble que vous essayez d'appliquer cette expression de filtre sur une colonne numérique. –
hımm oui juste. J'applique cette fonction dans une boucle foreach et le premier type d'argument est numérique. Les autres sont des chaînes. n'est pas possible de convertir un type numérique en chaîne dans ce cas. je vous remercie – mrkiyak
Donc, je dois d'abord appliquer la méthode ToString – mrkiyak