Recherche par Critères, Un champ "Tout"

Signaler
Messages postés
3
Date d'inscription
lundi 5 août 2013
Statut
Membre
Dernière intervention
7 août 2013
-
Messages postés
3
Date d'inscription
lundi 5 août 2013
Statut
Membre
Dernière intervention
7 août 2013
-
J'ai besoin d'une idée..
je viens de faire une recherche par plusiers critères, tout mes champs sont des dropdownlist, ça a bien marché, mais le problème C que dans chaque dropdownlist j'ai ajouté un champ "Tout" par exemple "tout les fournisseurs"dans la dropdownlist fournisseurs , la question est comme suit :
Comment je vais gerer par exemple le fait qu'en meme temps deux ou trois dropdownlist auraient en meme temps la valeur "tout" ou ...ou .. , ya pluuuuuusieurs cas !!!
Merciii d'avance

6 réponses

Messages postés
616
Date d'inscription
mercredi 10 septembre 2008
Statut
Membre
Dernière intervention
9 février 2017
6
Salut,

Désolé mais j'ai rien compris....
Messages postés
16348
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 octobre 2021
567
Je crois comprendre que en gros tu veux faire des filtres de données comme dans Excel

Il faudrait que tu mettes le code de ta requête actuelle.
Tu ne précises même pas s'il s'git d'une requête sql sur une base de données, ou une requête Linq sur une List<T> ou encore un autre type de requête.

Comment veux tu que l'on puisse te répondre.
Messages postés
3
Date d'inscription
lundi 5 août 2013
Statut
Membre
Dernière intervention
7 août 2013

Il s'agit d'une requete LINQ, voila ma méthode de recherche multicritères:

  public Object liste_recherche(int four, string fct, string etat,int ag, string fbp, string deloc, string caiss, string exter)
          {
              var req = from g in db.GABs
                        join fb in db.fondations on g.fk_numfbp equals fb.num_fond
                        join s in db.site_delocs on g.fk_numdeloc equals s.num_deloc
                        join f in db.fournisseurs on g.fk_numfournisseur equals f.numfournisseur
                        join t in db.types on g.fk_type equals t.ID
                        join fc in db.fonctions on g.fk_fonctiongab equals fc.fonction1
                        join e in db.Etats on g.fk_etat equals e.etat1
                        where g.fk_fonctiongab == fct && g.fk_numfournisseur==four && g.fk_cdagence==ag && g.fk_etat==etat
                        && g.bool_fbp==fbp && g.bool_deloc== deloc && g.bool_caissettes==caiss && g.bool_extern==exter
                        
                        select new
                        {

                            ID = g.numGab,
                            FBP = fb.site_fond,
                            Délocalisé = s.site_deloc1,
                            Fournisseur = f.nomfournisseur,
                            Type = t.type1,
                            NDeSérie = g.nserie,
                            Fonction = fc.fonction1,
                            Etat = e.etat1,
                            Externalisé = g.bool_extern,
                            Aqcuisition = g.date_acquisition

              };
              return req;
          }


j'espère que vous avez un peu compris de quoi ça s'agit ce bout de code:
Merci Infiniment d'avance :)
Messages postés
195
Date d'inscription
lundi 28 janvier 2013
Statut
Membre
Dernière intervention
13 janvier 2017
3
Salut 586me,

Au lieu de tout écrire en un seul bloc, tu peux essayer de composer ta request au fut et à mesure :

Imaginons que si les valeurs sont vides dans ce cas tu ne souhaites pas appliquer le filtre ...

public Object liste_recherche(int four, string fct, string etat ... ) {
    var req = from g in db.GABs
            join fb in db.fondations on g.fk_numfbp equals fb.num_fond
            join s in db.site_delocs on g.fk_numdeloc equals s.num_deloc
            join f in db.fournisseurs on g.fk_numfournisseur equals f.numfournisseur
            join t in db.types on g.fk_type equals t.ID
            join fc in db.fonctions on g.fk_fonctiongab equals fc.fonction1
            join e in db.Etats on g.fk_etat equals e.etat1
            select new
            {
    
                ID = g.numGab,
                FBP = fb.site_fond,
                Délocalisé = s.site_deloc1,
                Fournisseur = f.nomfournisseur,
                Type = t.type1,
                NDeSérie = g.nserie,
                Fonction = fc.fonction1,
                Etat = e.etat1,
                Externalisé = g.bool_extern,
                Aqcuisition = g.date_acquisition
    
            };
    if ( four > 0 ) {
        req = req.Where(g => g.fk_numfournisseur == four );
    }
    if ( !string.IsNullOrEmpty(fct) ) {
        req = req.Where(g => g.fk_fonctiongab == fct );
    }
    if ( !string.IsNullOrEmpty(etat) ) {
        req = req.Where(g => g.fk_etat == etat );
    }
    // etc ...
    return req;
}


C'est à faire sur l'ensemble des critères optionnels ...
Messages postés
16348
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 octobre 2021
567
Bonsoir,
il y a aussi la possiblité d'utiliser Linq Dynamique, voir ici
http://www.e-naxos.com/Blog/post/Donner-du-peps-a-Linq-!-(Linq-dynamique-et-parser-dexpressions).aspx

Par contre, j'ai été dérouté par le fait que la syntaxe ne semble pas être en c#.
Du coup j'avais aussi trouvé la possibilité de compiler dynamiquement la classe qui contient la requête.
http://codes-sources.commentcamarche.net/forum/affich-1610899-linq-to-object-type-de-sortie-modulable


Mais je crois que dans ton cas le plus simple est de faire plusieurs requête avec des if comme le suggère Ichiriac
Messages postés
3
Date d'inscription
lundi 5 août 2013
Statut
Membre
Dernière intervention
7 août 2013

Merci beaucoup pour vos réponses, cela m'a donné plusieurs idées..