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 :

Problème de recherche de valeur sur variable multiple [Débutant]


Sujet :

C#

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 6
    Points : 6
    Points
    6
    Par défaut Problème de recherche de valeur sur variable multiple
    Bonjour,

    Je viens de réaliser une méthode pour me renvoyer la valeur d'un champ stocké dans ma base de données. Le problème ici c'est que mon champ dans la BDD peut être variable ex : QUANTITEPREVI1, QUANTITEPREVI2 ,QUANTITEPREVI3 etc ...

    Voici mon code, histoire de comprendre

    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
     
    //Récupérer La Valeur de QTY de sur previ
                public int? GetValeurQty(long idprevi, long number)
                {
                    var pv = Context.PREVISION.FirstOrDefault(p => p.IDPREVI == idprevi);
                    int? Result = 0;
     
                    if (pv != null)
                    {
                        Result = pv.("QUANTITEPREVI" + number);
                    }
                    return Result;
     
     
                }
    Se que je n'arrive pas à trouver c'est ceci : Result = pv.("QUANTITEPREVI" + number);

    Merci d'avance

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Ce que tu cherches à faire n'est pas faisable. Enfin, si on veut être plus précis, il existe une solution crade pour le faire en utilisant de la reflection. Ca consiste à retrouver le nom des propriétés de la classe puis à les appeler.

    Pourquoi c'est crade ?
    - Parce que ça utilise de la reflection. Je ne dis pas que c'est mal de l'utiliser, mais il faut savoir l'utiliser par petites touches et dans certains cas bien précis.
    - Parce que la reflection peut créer des ralentissements, donc une baisse des perfs de manière plus ou moins significative selon les cas.

    Personnellement j'éviterai donc de passer par la case reflection (sauf si tu n'as aucune autre solution bien sûr). Le problème auquel tu fais face semble révéler un problème de conception de la base de données plus qu'autre chose.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Ok, mais je ne peut pas modifier ma bdd car j'ai d'autre contraintes qui me force à utiliser ce principe.

    Peut tu m'en dire plus sur le principe de réfléxion ?

    Moi se que je cherche c'est le moyen de lui dire d'aller chercher une valeur contenus dans un champs en fonction d'un numéro. La je n'arrive pas à trouver comment faire comprendre à mon instance de mon entité PREVISION que la valeur que je lui met fait bien partis de ses champs si il la li. Puisque si je lui met sa
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Result = pv.QUANTITEPREVI5;
    pas de problème sa existe mais je ne vois pas comment factoriser le "QUANTITEPREVI5" pour qu'il puisse le relire après.

    Merci ^^

  4. #4
    Membre expérimenté Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Points : 1 699
    Points
    1 699
    Par défaut
    Bonjour,
    En admettant que le numéro n'est pas trop élevé
    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
     
    //Récupérer La Valeur de QTY de sur previ
    public int? GetValeurQty(long idprevi, long number)
    {
    	var pv = Context.PREVISION.FirstOrDefault(p => p.IDPREVI == idprevi);
    	int? Result = 0;
     
    	if(number == 1)
    	{
    		Result = pv.QUANTITEPREVI1;
    	}
    	if(number == 2)
    	{
    		Result = pv.QUANTITEPREVI2;
    	}	
    	// .....
    	if(number == 5)
    	{
    		Result = pv.QUANTITEPREVI5;
    	}
     
    	 return Result;
    }
    N'oubliez pas le tag et

  5. #5
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    La méthode de callo est bonne (pas de reflection) mais effectivement s'il y a beaucoup de cas à gérer ça peut devenir galère

    Pour la reflection, il y a la méthode classique... On parcourt les propriétés du type de l'objet, grâce à une méthode d'extension par exemple :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public static class ReflectionExtensions
    {
    	public static T GetPropertyValue<T>(this object obj, string attributeName)
    	{
    		PropertyInfo p = obj.GetType().GetProperty(attributeName);
    		return (T)p.GetValue(obj, null);
    	}
    }
    Utilisation :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var nomProprieteRecherchee = "QUANTITEPREVI" + i.ToString();
    var valeurDeLaPropriete = ReflectionExtensions.GetPropertyValue<string>(pv, nomProprieteRecherchee);
    Si tu es sur une version du framework >= 4.0, tu peux aussi te pencher sur l'utilisation de la classe DynamicObject.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Merci ^^ pour vos réponses,

    Je vais tester la réfléxion car j'ai 24 champs possible * 4 à terme.

    Je pense que si sa ne marche pas j'utiliserait un case ou la méthode if proposé

    Merci encore pour vos réponses rapides et présices !!

    PS : je fermerais mon msg quand j'expliquerait ma solution employé.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 16
    Points : 19
    Points
    19
    Par défaut
    Regarde la chaine : "QUANTITEPREVI" + number, si au final, c'est bien " "QUANTITEPREVI0" ou "QUANTITEPREVI1" et pas "QUANTITEPREVI1.0" par exemple ^^ sinon tu fais un String.Substring du total pour enlever le point et le zéro

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Bon ba la reflexion marche bien et ne fait pas ramer mon site (procédure en arrière plan).

    Merci encore

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

Discussions similaires

  1. [XL-2007] Rechercher une valeur sur base de deux critères
    Par HIGGUINS dans le forum Excel
    Réponses: 2
    Dernier message: 10/11/2010, 18h28
  2. problème de conservation des valeurs sur changement d'un uipanel
    Par quoi_godard dans le forum Interfaces Graphiques
    Réponses: 3
    Dernier message: 29/07/2010, 17h43
  3. Problème : Recherche de valeur sur Excel
    Par tzehani dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 10/08/2007, 15h45
  4. Problème : Recherche de valeur sur Excel
    Par tzehani dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 07/08/2007, 16h04
  5. Réponses: 4
    Dernier message: 31/07/2007, 21h52

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