2 votes

Comment rechercher la même chaîne de recherche dans plusieurs colonnes ?

Je cherche à saisir une chaîne de caractères à partir d'un contrôle de type textbox dans un modèle de données EF. Quelqu'un pourrait-il m'aider à construire la clause where dans le fichier de code pour faire cela ? J'ai essayé le morceau de code ci-dessous dans le code, même si elle compile jette une erreur lorsque je saisis la chaîne de recherche et soumettre la recherche.

Where("it.[CaseName] like '%'" + searchString +
    "'%' or it.[CaseNumber] like '%'" + searchString +
    "'%' or it.[AppRegNumber] like '%'" + searchString +
    "'%' or it.[SSNo] like '%'" + searchString + "'%'")

Lorsque cette même clause where est utilisée dans le balisage du contrôle EntityDataSource, elle est acceptée et la recherche se fait correctement. Je suis en train de modifier mes pages pour utiliser le contrôle ObjectDataSource afin de me connecter à une classe de la couche logique de l'entreprise au lieu de me connecter directement au modèle de données de la GED.

3voto

Slauma Points 76561

Si vous voulez utiliser le Where La méthode Query Builder de ObjectQuery (je pense que c'est ce que vous utilisez dans votre question), vous devez supprimer les guillemets simples internes de l'expression de la requête :

Where("it.[CaseName] like '%" + searchString +
    "%' or it.[CaseNumber] like '%" + searchString +
    "%' or it.[AppRegNumber] like '%" + searchString +
    "%' or it.[SSNo] like '%" + searchString + "%'")

Ou comme une requête paramétrée :

Where("it.[CaseName] like @search" +
    " or it.[CaseNumber] like @search" +
    " or it.[AppRegNumber] like @search" +
    " or it.[SSNo] like @search",
    new ObjectParameter("search", string.Concat("%", searchString, "%")))

Modifier

N'utilisez pas la première version si searchString provient de l'entrée de l'utilisateur sur une page web car cette version est vulnérable à Injection SQL (entrez ce terme dans un moteur de recherche pour obtenir une explication). Utilisez plutôt la requête paramétrée dans la deuxième version.

0voto

Milimetric Points 7539

Eh bien, vous pouvez utiliser les méthodes d'extension Linq :

.Where(r => r.CaseName.IndexOf(searchString) >= 0
    || r.CaseNumber.IndexOf(searchString) >= 0
    || r.AppRegNumber.IndexOf(searchString) >= 0
    || r.SSNo.IndexOf(searchString) >= 0)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X