je tentais de créer dynamiquement un cas prédicat pour une requête LINQ2SQL:Différence entre les surcharges Expression.Call?
...Where(SqlMethods.Like(r.Name, "%A%") ||
SqlMethods.Like(r.Name, "%B%") ||
SqlMethods.Like(r.Name, "%C%") || ...)
A, B, C, etc. proviennent de quelque tableau. J'ai donc essayé les éléments suivants:
var roleExpression = Expression.Parameter(typeof(Role), r);
var nameExpression = Expression.Property(roleExpression, "Name");
var termExpression = Expression.Constant("%" + term[i] + "%");
var likeExpression = Expression.Call(
typeof(SqlMethods), "Like",
new[] { typeof(string), typeof(string) }, nameExpression, termExpression);
Cependant, la dernière ligne échoue avec le message Aucune méthode « Like » sur le type « System.Data.Linq.SqlClient.SqlMethods » est compatible avec les arguments fournis.
donc j'ai essayé la ligne suivante:
var likeExpression = Expression.Call(null,
typeof(SqlMethods).GetMethod("Like", new[] { typeof(string), typeof(string) }),
nameExpression, searchTermExpression)
Cela fonctionne. Cependant, je ne comprends pas quelle est la différence entre ces deux lignes. À mon avis, ils devraient donner le même résultat.
Quelqu'un peut-il expliquer cela?
Cordialement,
Ronald Wildenberg
Il n'y a pas de méthode de SqlMethods.Like qui accepte les arguments de type générique, donc cela ne peut pas être la différence entre les deux appels. –
Vous avez manqué le point de ma réponse ... c'est preciseley *** parce que *** de ce qu'il échoue ... (args de type générique) –
Ah, je vois. Comme toujours, il s'agit de lire attentivement la documentation. Merci pour votre réponse. –