IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linq Discussion :

[Linq to Sql] [c#] accent et tiret


Sujet :

Linq

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 17
    Par défaut [Linq to Sql] [c#] accent et tiret
    Hé l'eau

    J'ai une petite question, es ce qu'on peux interroger une base avec Linq to Sql
    sans tenir compte des accents et des tirets ?

    Pour être un peu plus précis je vais vous expliquer mon cas:
    j'ai une base de donnée avec les noms des régions et j'ai fait un linq to sql
    pour y accéder en y ajoutant ce bout de code j'arrive a accéder au nom des régions:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    string [] listeRegion;
    RegionDataContext db = new RegionDataContext();
    listeRegion = db.region.Where(n => n.region1.StartsWith(prefixText)).OrderBy(n => n.region1).Select(n => n.region1).Take(count).ToArray();
    Ce code me sert à faire une auto complétion ... Mais le problème c'est que
    si l'utilisateur veux taper "ile de France" l'auto complétion ne vas pas fonctionner car dans ma base l'ile de France est marqué "Île-De-France"

    Donc ça serais bien si je pouvais préciser dans ma requête qu'il ne faut pas tenir compte des tirets et des accents...

    Ah oui une petite question bonus pour ceux qui penserais que ma première question est trop fastoche :
    Comment je dois m'y prendre si je cherche par exemple une ville
    et qu'au lieu de taper "La Courneuve" l'utilisateur tape directement "Courneuve" j'ai pensé à ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    string [] listeRegion;
    RegionDataContext db = new RegionDataContext();
    listeRegion = db.region.Where(n => n.region1.Contains(prefixText)).OrderBy(n => n.region1).Select(n => n.region1).Take(count).ToArray();
    mais ça me fait pas exactement ce que je veux
    si quelqu'un a une idée ça serai pas de refus

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 72
    Par défaut
    Salut,

    Pour supprimer les accents j'ai déjà utilisé ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public string RemoveDiacritics(string text)
            {
     
     
                return System.Text.Encoding.ASCII.GetString(System.Text.Encoding.GetEncoding(1251).GetBytes(text));
     
     
            }
    Pour info je l'avais trouvé ici.

    pour les "-" je pense qu'un simple .Replace("-", " ") devrait suffir.

    Qu'est qui ne convient pas avec "Contains" ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 17
    Par défaut
    Merci pour ta réponse mezzo_998 mais je ne vois pas comment faire pour insérer cette fonction dans ma requête

    Qu'est qui ne convient pas avec "Contains" ?
    Le problème avec Contains c'est que si par exemple je recherche
    "La Courneuve" et que je tape "La Co" il va me sortir "Écot-la Combe"
    et c'est normal il y a bien 'L', 'a' ,' ', 'C' 'o' dans "Écot-la Combe"

    il faudrait que je lui spécifie qu'ils faut que les lettres se suivent

    Je vais essayer de voir comment faire

  4. #4
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Citation Envoyé par ogrist93 Voir le message
    Merci pour ta réponse mezzo_998 mais je ne vois pas comment faire pour insérer cette fonction dans ma requête
    Transformes les méthode en méthode d'extension (Google it) et change l'appel par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    db.region.Where(n => n.region1.RemoveDiactrics()....)

    Le problème avec Contains c'est que si par exemple je recherche
    "La Courneuve" et que je tape "La Co" il va me sortir "Écot-la Combe"
    et c'est normal il y a bien 'L', 'a' ,' ', 'C' 'o' dans "Écot-la Combe"

    il faudrait que je lui spécifie qu'ils faut que les lettres se suivent
    J'ai rien compris.
    "La Co" dans "Écot-la Combe" on a bien les lettres qui se suivent "Écot-la Combe" c'est quoi le soucis ? Tu veux un StartsWith() ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 17
    Par défaut
    Citation Envoyé par Skyounet Voir le message
    Transformes les méthode en méthode d'extension (Google it) et change l'appel par db.region.Where(n => n.region1.RemoveDiactrics()....)
    j'essaie ça tout de suit


    Citation Envoyé par Skyounet Voir le message
    J'ai rien compris.
    "La Co" dans "Écot-la Combe" on a bien les lettres qui se suivent "Écot-la Combe" c'est quoi le soucis ? Tu veux un StartsWith() ?
    Oui c'est ça!, un StartsWith() mais qui servirai à ranger

    En faite j'aurais aimé avoir un résultat du style ( si je tape La Co):
    (on affiche d'abord les startswith)
    La Cochère
    ....
    La Courneuve
    ....
    ....
    (une fois que mes startswith sont tous affiché on affiche les contains)
    Écot-la Combe
    .....
    .....
    donc si on veux, on affiche en priorité les villes que j'aurais eu avec seulement un StartsWith()
    Ensuite les villes que j'aurais eu seulement avec un Contains()

    pour ça j'ai pensé à faire deux string[]:
    une qui contiendrai ma requête avec seulement un StartsWith()
    et une autre qui contiendrais seulement Contains ()
    après j'aurais plus qu'à faire la concaténation des deux résultats
    et supprimer les doublons

    Sinon J'ai pensé à chercher du cotés de mon OrderBy ( me trier le Contains en fonction de StartsWith) mais c'est encore une idée très vague

  6. #6
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Ben tu n'as qu'à mettre un || (ou) dans ton Where en faisant quand même un Distinct (me souviens plus en Linq l'équivalent).

Discussions similaires

  1. Réponses: 7
    Dernier message: 19/02/2008, 14h14
  2. [Linq 2 SQL] Problème de modélisation
    Par tomlev dans le forum Accès aux données
    Réponses: 5
    Dernier message: 12/02/2008, 23h29
  3. [Linq to sql] db.add() ?
    Par telynette dans le forum Accès aux données
    Réponses: 2
    Dernier message: 08/02/2008, 19h54
  4. [Linq to SQL] Refresh du dbml
    Par zeavan dans le forum Visual Studio
    Réponses: 5
    Dernier message: 02/01/2008, 10h15
  5. Importation SQL - SSH - Accents
    Par Eros69 dans le forum Outils
    Réponses: 0
    Dernier message: 23/08/2007, 21h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo