Je semble avoir un problème lors de l'utilisation de Linq to Sql dans lequel la méthode Where ajoute une référence de chaîne à la liste de critères. Lorsque la référence est modifiée, elle produit des résultats erronés. Par exemple, l'extrait de code ci-dessous lorsqu'il est utilisé avec le texte d'entrée retourne « John Smith » tous les dossiers dont le nom contient « Smith »Évaluation différée des chaînes dans Linq to SQL
var qry = from c in ctx.Customers select c;
if (!string.IsNullOrEmpty(Name.Text))
{
foreach(string s in Name.Text.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries))
qry = qry.Where(c => c.Name.Contains(s));
}
ResultSet.DataSource = qry;
ResultSet.DataBind();
Cet extrait exécute en fait la requête SQL suivante:
SELECT (fields)
FROM [dbo].[Customers] AS [t0]
WHERE ([t0].[Name] LIKE @p0) AND ([t0].[Name] LIKE @p1)
@p0='%smith%',@p1='%smith%'
Notez que les deux paramètres sont évalués à "smith" qui se trouve être la dernière valeur de s
après la sortie de la boucle foreach. Quelqu'un peut-il donner un aperçu de cette situation?
Merci.