Je travaille sur une application ASP.NET MVC qui utilise le modèle de référentiel avec LINQ to SQL comme source de données. Dans mon dépôt j'expose la méthode suivante:Bizande d'expression lambda dans une condition LINQ to SQL
public IEnumerable<T> Find(Expression<Func<T, bool>> where)
{
return _context.GetTable<T>().Where(where);
}
Je suis en mesure d'appeler cela en disant:
repository<User>().Find(u => true);
Mais si j'essayer de faire (lorsque la recherche est nulle)
repository<User>().Find(u => !string.IsNullOrEmpty(search) ? u.UserName.Contains(search) : true);
J'obtiens l'erreur:
Value cannot be null. Parameter name: text
I t Je pensais que l'expression lambda exécuterait la même chose puisque la valeur de search est nulle, mais ce n'est clairement pas le cas.
Comment résoudre ce problème?
Pouvez-vous montrer un peu plus de contexte? L'évaluation paresseuse rend LINQ un peu difficile à analyser sans voir comment vous utilisez sa sortie. –
Les paramètres IsNullOrEmpty et Contains s'appellent 'value', donc l'erreur ne vient pas d'eux. – SWeko
@SWeko: 'string.Contains' ne lancerait pas l'exception, l'évaluation de l'analyseur d'expression de l'appel à' string.Contains' pour construire une expression 'LIKE' le ferait. –