Bonjour,
J'ai constaté un comportement étrange sur une requête Linq To Entities.
Pour l'histoire, j'ai une table contenant des clients avec, entre autre, un champ NomPrenom. L'utilisateur peut faire une recherche en saisissant un nom/prenom dans un seul champ. Pour que la recherche marche bien, on a fait une table de mot qui permet de savoir quels clients est concerné par chaque mot.
Si l'utilisateur tape "Alain Dupont" (ou "Dupont Alain"), ça doit renvoyer tous les clients qui ont à la fois le mot Alain et le mot Dupont.
Pour faire la recherche, j'avais donc fait ça dans ma fonction
tabNomPrenom étant un tableau contenant tous les mots saisis par l'utilisateur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 foreach (var item in tabNomPrenom) { q = q.Where(ocn => ocn.Client.MotOes.Any(mot => mot.Lib.ToUpper().Contains(item.ToUpper())); }
Le problème, c'est qu'au lieu de renvoyer les clients qui ont à la fois le mot "Alain" et le mot "Dupont", ça me renvoie les clients qui ont le mot "Alain" ou le mot "Dupont".
Pour comprendre d'ou venait le problème, j'ai essayé de faire ça :
Pour moi, c'est exactement la même chose mais décomposé au lieu d'être dans le foreach. Pourtant, à ma grande surprise, le résultat est différent. En faisant comme ça, j'ai bien les clients qui ont à la fois le mot "Alain" et le mot "Dupont".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 q = q.Where(ocn => ocn.Occupant.MotOes.Any(mot => mot.Lib.ToUpper().Contains("ALAIN")))); q = q.Where(ocn => ocn.Occupant.MotOes.Any(mot => mot.Lib.ToUpper().Contains("DUPONT"))));
Quelqu'un pourrait m'expliquer le pourquoi. Je ne vois pas quelle est la différence entre mon foreach et mon deuxième code. Sur le papier, c'est pareil.
Partager