2009-11-16 2 views
0

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.

Répondre