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

C# Discussion :

dans une recherche Where est-il possible de mettre un If ?


Sujet :

C#

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Juin 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 6
    Points : 7
    Points
    7
    Par défaut dans une recherche Where est-il possible de mettre un If ?
    Bonjour tt le monde, la question est dans le titre...
    je fais une recherche dans une DataTable en utilisant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
                            EnumerableRowCollection<DataRow> recherche_categorie =
                            from les_categories in tous_les_categories.AsEnumerable()
                            where les_categories.Field<string>("bdd_produits_categorie_interne").ToString() == "oui"
                            orderby les_categories.Field<string>("bdd_produits_categorie_nom")
                            select les_categories;
                            DataView view_categories = recherche_categorie.AsDataView();
                            gridview_categories.DataSource = view_categories;
    dans la partie "Where" de la fonction, est-il possible d'inclure une instruction "If" pour faire varier les recherches suivant mon type de categorie ( interne, externe, mixte, actif, inactif )?
    j'ai essayé de l'ecrire mais je n'y arrive pas... du coup je sais meme pas si cest possible...
    d'avance merci

  2. #2
    Membre expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Points : 3 304
    Points
    3 304
    Par défaut
    Non ce n'est pas possible directement dans le where.

    Une solution est de faire varier ta clause where en fonction de ta catégorie.

    ou si tu as un champ qui identifie ta catégorie dans la table sur laquelle porte le where, tu peux faire un truc du genre :

    WHERE (CATEG = CATEG1 AND ....) OR (CATEG = CATEG2 AND ...)

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Juin 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    Le "OR" correspond a un genre de "Where Else"?

    en fait ma recherche de categorie doit avoir les possibilitées suivantes:
    (actif ou inactif ou les deux) et (interne ou externe ou les deux)

    sinon, pensais effectuer les 6 types de recherche independament (ca c'est bon je peux les faire sur la meme methode de recherche) mais pour additionner les 6 résultats dans mon GridView ca j'y arrive pas....

  4. #4
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 493
    Points
    5 493
    Par défaut
    Quelque chose de ce genre, ça ne fonctionnerait pas ?

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ... where { 
       if (condition1) return condition2;
       else return condition3;
    } orderby ...

    Cela dit ça ne vaut sans doute pas un bon vieux :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    ... where categorie.EstEligiblePourLaRecherche() orderby...

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Juin 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    je crois que je pourrais m'en sortir avec ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
                        DataView view_categories_asm = new DataView();
     
     
                        if (checkbox_recherche_categorie_interne.Checked == true)
                        {
                            EnumerableRowCollection<DataRow> recherche_categorie_interne =
                            from les_categories in tous_les_categories.AsEnumerable()
                            where les_categories.Field<string>("bdd_produits_categorie_interne").ToString() == "oui"
                            orderby les_categories.Field<string>("bdd_produits_categorie_nom")
                            select les_categories;
                            DataView view_categories_interne = recherche_categorie_interne.AsDataView();
                            gridview_categories.DataSource = view_categories_interne;
                        }
                        if (checkbox_recherche_categorie_externe.Checked == true)
                        {
                            EnumerableRowCollection<DataRow> recherche_categorie_externe =
                            from les_categories in tous_les_categories.AsEnumerable()
                            where les_categories.Field<string>("bdd_produits_categorie_externe").ToString() == "oui"
                            orderby les_categories.Field<string>("bdd_produits_categorie_nom")
                            select les_categories;
                            DataView view_categories_externe = recherche_categorie_externe.AsDataView();
                            gridview_categories.DataSource = view_categories_externe;
                        }
                        if (checkbox_recherche_categorie_actif.Checked == true)
                        {
                            EnumerableRowCollection<DataRow> recherche_categorie_actif =
                            from les_categories in tous_les_categories.AsEnumerable()
                            where les_categories.Field<string>("bdd_produits_categorie_etat_actif").ToString() == "oui"
                            orderby les_categories.Field<string>("bdd_produits_categorie_nom")
                            select les_categories;
                            DataView view_categories_actif = recherche_categorie_actif.AsDataView();
                            gridview_categories.DataSource = view_categories_actif;
                        }
                        if (checkbox_recherche_categorie_inactif.Checked == true)
                        {
                            EnumerableRowCollection<DataRow> recherche_categorie_inactif =
                            from les_categories in tous_les_categories.AsEnumerable()
                            where les_categories.Field<string>("bdd_produits_categorie_etat_actif").ToString() == "non"
                            orderby les_categories.Field<string>("bdd_produits_categorie_nom")
                            select les_categories;
                            DataView view_categories_inactif = recherche_categorie_inactif.AsDataView();
                            gridview_categories.DataSource = view_categories_inactif;
                        }
    sauf que quand je fais ça, le datasource de mon gridview est écrasé a chaque fois suivant les résultats de chaque categorie (si les 4 situations sont true, la 4° ecrase les 3 autres).... comment faire pour "ajouter" ces résultats à mon gridview? un truc du genre: "gridview_categories.DataSource.Add(recherche_categorie_inactif)" .... je précise que j'ai essayé ça ;p

  6. #6
    Membre expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Points : 3 304
    Points
    3 304
    Par défaut
    Ce que tu dois faire, ce n'est pas ajouter tout les résultats à ton datagridview, mais ajouter toutes les conditions à ta clause where.

    Si 2 conditions sont vrais, tu dois ajouter concaténer les clauses Where pour n'en faire qu'une et à partir de celle-ci effectuer la recherche.

    J'espère avoir été clair

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Juin 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    J'ai galéré à comprendre ce que vous vouliez me dire et comment je devais m'y prendre mais j'ai reussi grace a vous ;p

    mon code donne ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
                    string recherche_categorie_interne = "rien";
                    string recherche_categorie_externe = "rien";
                    string recherche_categorie_actif = "rien";
                    string recherche_categorie_inactif = "rien";
     
     
                    if (checkbox_recherche_categorie_interne.Checked == true && checkbox_recherche_categorie_externe.Checked == true)
                    { recherche_categorie_interne = "oui"; recherche_categorie_externe = "oui"; }
                    if (checkbox_recherche_categorie_interne.Checked == true && checkbox_recherche_categorie_externe.Checked == false)
                    { recherche_categorie_interne = "oui"; recherche_categorie_externe = "non"; }
                    if (checkbox_recherche_categorie_interne.Checked == false && checkbox_recherche_categorie_externe.Checked == true)
                    { recherche_categorie_interne = "non"; recherche_categorie_externe = "oui"; }
                    if (checkbox_recherche_categorie_actif.Checked == true && checkbox_recherche_categorie_inactif.Checked == true)
                    { recherche_categorie_actif = "oui"; recherche_categorie_inactif = "oui"; }
                    if (checkbox_recherche_categorie_actif.Checked == true && checkbox_recherche_categorie_inactif.Checked == false)
                    { recherche_categorie_actif = "oui"; recherche_categorie_inactif = "non"; }
                    if (checkbox_recherche_categorie_actif.Checked == false && checkbox_recherche_categorie_inactif.Checked == true)
                    { recherche_categorie_actif = "non"; recherche_categorie_inactif = "oui"; }
     
     
     
                            EnumerableRowCollection<DataRow> recherche_categorie =
                            from les_categories in tous_les_categories.AsEnumerable()
                            where les_categories.Field<string>("bdd_produits_categorie_interne").ToString() == recherche_categorie_interne
                            || les_categories.Field<string>("bdd_produits_categorie_externe").ToString() == recherche_categorie_externe
                            where les_categories.Field<string>("bdd_produits_categorie_etat_actif").ToString() == recherche_categorie_actif
                            || les_categories.Field<string>("bdd_produits_categorie_etat_inactif").ToString() == recherche_categorie_inactif
                            orderby les_categories.Field<string>("bdd_produits_categorie_nom")
                            select les_categories;
                            gridview_categories.DataSource = recherche_categorie.AsDataView();
    je sais pas si c'est optimisé (certainement pas) mais ca marche ;p

    merci à tous et en espérant que ca puisse servir à d'autres

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/10/2011, 15h46
  2. Deux requêtes dans une seule requête, est-ce possible ?
    Par Stephane_br dans le forum Développement
    Réponses: 3
    Dernier message: 08/07/2011, 15h35
  3. Avoir deux applications quasi identiques dans une même webapp, est-ce possible?
    Par mbraten dans le forum Développement Web en Java
    Réponses: 0
    Dernier message: 28/02/2011, 16h48
  4. Réponses: 8
    Dernier message: 04/07/2007, 12h51
  5. [POO] Une Classe dans une Classe. C'est possible?
    Par FrankOVD dans le forum Langage
    Réponses: 2
    Dernier message: 18/05/2006, 22h02

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