Convertir le prédicat en expression <Func >

Est-il possible de convertir un Predicate to Expression<Func> en quelque sorte?

J’aimerais utiliser la prochaine fonction IQueryable en utilisant les filtres de mon ICollectionView:

 public static System.Linq.IQueryable Where(this System.Linq.IQueryable source, System.Linq.Expressions.Expression<System.Func> predicate) 

Merci

En théorie, il est possible de convertir un délégué “en arrière” en une expression, car vous pouvez demander l’IL émise d’un délégué, ce qui vous donne les informations nécessaires pour le reconvertir.

Cependant, c’est pour une raison que ni LINQ to SQL ni Entity Framework ne le font. Il est complexe, fragile et exigeant en performances de le faire.

Donc, la réponse courte est que vous ne pouvez pas le transformer en une expression.

Quelque chose comme ça?

 Predicate predicate = input => input.Length > 0; Expression> expression = (input) => predicate(input); 

Vous pouvez probablement créer une méthode d’extension pour votre ICollectionView qui prend un prédicat, le convertit en une expression comme celle-ci, puis appelle la méthode Where fournie par Linq.

 public static IQueryable Where(this IQueryable source, Predicate predicate) { return source.Where(x => predicate(x)); } 
 namespace ConsoleApplication1 { static class Extensions { public static Expression> ToExpression(this Predicate p) { ParameterExpression p0 = Expression.Parameter(typeof(T)); return Expression.Lambda>(Expression.Call(p.Method, p0), new ParameterExpression[] { p0 }); } } }