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 :

creation d'une class pour obtenir le nom d'une variable la plus proche d'une valeur choisi [Débutant]


Sujet :

C#

  1. #1
    Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Octobre 2015
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2015
    Messages : 98
    Points : 59
    Points
    59
    Par défaut creation d'une class pour obtenir le nom d'une variable la plus proche d'une valeur choisi
    Bonjour a tous,
    Longue hésitation avant de poster ce 1er post, j'aime bien fouiller le net pour trouver les solutions mais la je suis en échec sur ce bout de code depuis trop longtemps alors je demande un peu d'aide.
    Merci d'avance a tous ceux qui pourront me filer un coup de main.

    J'ai une Bdd SQL server (local) avec une seul table composé d'une colonne "reponse" (string) et de X colonnes composé de 1 ou de 0 (byte).
    Je souhaite obtenir la somme de chaque colonne puis déterminer avec un petit trie ou une comparaison (sorte d'algo), la somme la plus proche d'une valeur déterminer à l'avance.
    Pour l’accès a la BDD j'ai essayer pas mal de choses: entity to SQL, to Object, to Entity, avec ou sans lambda , LinQ dynamic bref je suis pas chauvin . Les entities, Ienumerateur, obejectcontext reste des notions très flou pour moi alors je les ai toutes tester avec plus ou moins de succès mais jusque la je travailler exclusivement dans le code. Je me lance dans la création de méthode et je suis en misère.

    Autre soucis, ancien adepte du php je me lance dans le c# et essayer de réfléchir en php puis de le traduire en c# est une mauvaise manière de réfléchir mais c'est dur de racrocher .

    Je vous donne mon code C# et celui en php qui fonctionne très bien au cas ou mes explications ne seraient pas assez claires.

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Data;
    using System.Data.Entity;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Data.Entity.Core.Objects;
    using System.Data.Entity.Core.Objects.DataClasses;
    using DiaDocV1.App_Data;
    using System.Text;
    using System.Globalization;
    using System.Data.SqlClient;
    using System.Data.Common;
    using System.Data.Entity.Core.EntityClient;
    using System.Linq.Dynamic;
     
    namespace Dadidou
    {
        public partial class pagetestEF : System.Web.UI.Page
        {
            public partial class effet // La méthode qui doit me renvoyer le nom de la colonne dont la somme est la plus proche d'une valeur determiné
            {
                public double bidu;   // la variable qui stock cette somme
                public string Name;  // nom de la colonne
                public int Somme;   // somme de la colonne
     
                public effet()
                {
                    using (var db = new DiagEntities())   // appel  de mon fichier edmx qui contiens les info de la bdd "DiagTab"
                    {
                        effet[] pets = { new effet {Name= "sumvivant", Somme= db.DiagTabs.Sum(p => p.Vivant)}, //4   -   5,5
                                 new effet {Name="sumpetit", Somme= db.DiagTabs.Sum(p => p.Petit)},   //13   -3,5
                                 new effet {Name="summanger", Somme= db.DiagTabs.Sum(p => p.Manger)},  //3    - 6,5
                                 new effet {Name="sumbricolage", Somme= db.DiagTabs.Sum(p => p.Bricolage) }, //6   - 3,5
                                 new effet {Name="sumeanimal", Somme=db.DiagTabs.Sum(c => c.Animal) },  //3    -6,5
                                 new effet {Name="sumcuisine", Somme=db.DiagTabs.Sum(c => c.Cuisine) }, //4     5,5
                                 new effet {Name="sumefeminin", Somme=db.DiagTabs.Sum(c => c.Feminin) }, //13    - 3,5
                                 new effet {Name="sumtienmain", Somme=db.DiagTabs.Sum(c => c.Tienmain) }, //11   - 1,5
                                 new effet {Name="sumbureau", Somme=db.DiagTabs.Sum(c => c.Bureau) }  //3     -6,5
                                    };
     
                        foreach (effet item in pets)   // j'ai choisi comme valeur a s'approcher pour l’instant "9,5"
                        {
                            double[] boubou = new[] { Math.Abs(9.5 - item.Somme) }; // création d'un tableau qui récupère en valeur absolue l'écart par rapport à 9,5 
     
                            double ValeurMax = boubou[0];  // on initialise,  pour l’instant VarMax égal a valeur de boubou[0]                       
     
                            for (int i = 0; i < boubou.Length; i++)
                            {
                                if (boubou[i] < ValeurMax)
                                {
                                    ValeurMax = boubou[i];
                                }
                                double bidu = ValeurMax;
                            }
     
     
                        }
                    }
                } 
            } 
     
     protected void Page_Load(object sender, EventArgs e)  // a la suite ma class http qui va afficher des truc sur ma page web
            { 
              effet toto = new effet(); // appel de la class effet 
                Tata5.Text = toto.bidu();  // requete qui doit me renvoyer... je sais plus vraiment quoi, la valeur? l'item, bref c'est faux...
    voila pour le code.
    - Bon l'algo ne va pas. Est-ce qu'un tri des valeurs absolue dans une liste type "enumerator" et la selection du dernier "Last" ne serait pas plus judicieux? J'ai essayer mais je n'arrive pas à récuperer ensuite le nom de la variable qui va bien...
    - La méthode est aussi foireuse, j'ai tenté un Out in bidu mais sans grand succés
    -la récupération de la requêtes ensuite pour l'afficher (ou en faire autre choses) n'est pas bonne non plus mais comme le reste ne fonctionne pas difficile de l'évaluer (exeption overflow).

    Voila si vous pouvez m'aider sur un de ces 3 points ou même les 3 ça serait vraiment sympas.
    Si ça peut aider j'ai refait le truc en php qui marche lui a la perfection , voici le code :

    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
     
    <?php 
     
    				$req = $bdd->prepare('SELECT SUM(c_vivant) AS sum_vivant, 
    											 SUM(Petit) AS sum_petit,
    											 SUM(manger) AS sum_manger,
    											 SUM(bricolage) AS sum_bricolage,
    											 SUM(c_animal) AS sum_c_animal,
    											 SUM(cuisine) AS sum_cuisine,
    											 SUM(feminin) AS sum_feminin,
    											 SUM(tien_main) AS sum_tien_main,
    											 SUM(dans_bureau) AS sum_dans_bureau											 
    									 FROM animal_seq');
    	$req->execute();
     
    	while ($donnees2 = $req-> fetch())
    			{
     
    			$colonn1 = $bdd->prepare('SELECT COUNT(REPONSE) FROM animal_seq');
    			$colonn1->execute();
    			$nligne1 = $colonn1->fetchAll(PDO::FETCH_COLUMN, 0);
    			$notre_chiffre1= $nligne1[0]/2; //permet de définir une variable reference (=nombre de ligne restante /2 et pour mon exemple j'ai mis 9,5)
     
    				if ($nligne1[0]>=0 && $nligne1[0]<21)
    						{
    						foreach($donnees2 as $new)
    								{
    								//on cree une variable qui sera notre ecart en valeur absolue
    								$abs=abs($new-$notre_chiffre1);             
    								//et on cree un nouveau tableau $array qui contiendra la valeur "normale" associee a son ecart par 
    								//rapport au nombre choisi en valeur absolue (ou plutot l'inverse)
    								$array[$abs]=$new;  
    								}		
    						ksort($array);  //on trie les clés dans l'ordre croissant 
    						$ecartok=current($array); //on recupere le premier element du tableau $array
    						$key = array_search($ecartok, $donnees2); // retourne la clé de la valeur trouvé
    						}
    				elseif($n_ligne==0)
    						{
    						echo 0;
    						}
    			}		 
    $req->closeCursor();						  
    ?>
    Encore une fois merci de votre aide

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 153
    Points : 25 071
    Points
    25 071
    Par défaut
    si j'ai bien compris, ca m'a l'air bien compliqué dans ta tête alors que c'est plutot simple

    si tu as une valeur dans une variable, et que tu cherches quelle sum(colonne) est plus proche de cette valeur il suffit de faire
    récupération des valeurs sum avec ado.net, toutes les techniques de lecture de données que tu sites ne sont que des surcouches répondant à des problématiques, pour lire des données tu peux utiliser le truc de base, undbcommand.Executeader

    après tu parcours chaque valeur pour trouver la plus petite différence (rien de sorcier non plus)

    et c'est tout...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Octobre 2015
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2015
    Messages : 98
    Points : 59
    Points
    59
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    ca m'a l'air bien compliqué dans ta tête
    On ne peut plus d'accord avec toi . Du coup je ne suis pas sure que repartir sur un nouveau truc après 2 mots lapidaire lâché sur un forum soit la solution a mon problème
    Je suis parti sur un map de Server edmx, couche supplémentaire je te l'accorde MAIS, censé simplifier les choses ! Donc bon je voudrais essayer de me caler dessus et avancer un peu dans cette direction.

    J'ai refait un code peut être plus simple pour la mise en place du tri(ou algo) ultérieurement mais tellement sale que j'ai honte de l'inscrire J'ai intégré la valeur absolue dans le tableau et roulez!

    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
     
     public class Hazard
        {
            public string _Name;
            public int _Somme;
            public double _Absolute;
     
       }
            public string Effet()
            {
                DiagEntities db = new DiagEntities();
                Hazard[] pets = { new Hazard {_Name= "sumvivant", _Somme= db.DiagTabs.Sum(p => p.Vivant), _Absolute = Math.Abs(9.5 - (db.DiagTabs.Sum(p => p.Vivant)))}, 
                                 new Hazard {_Name="sumpetit", _Somme= db.DiagTabs.Sum(p => p.Petit), _Absolute = Math.Abs(9.5 - (db.DiagTabs.Sum(p => p.Petit)))}, 
                                 new Hazard {_Name="summanger", _Somme= db.DiagTabs.Sum(p => p.Manger), _Absolute = Math.Abs(9.5 - (db.DiagTabs.Sum(p => p.Manger)))},
                                 new Hazard {_Name="sumbricolage", _Somme= db.DiagTabs.Sum(p => p.Bricolage), _Absolute = Math.Abs(9.5 - (db.DiagTabs.Sum(p => p.Bricolage)))},
                                 new Hazard {_Name="sumeanimal", _Somme=db.DiagTabs.Sum(p => p.Animal), _Absolute = Math.Abs(9.5 - (db.DiagTabs.Sum(p =>p.Animal)))},  
                                 new Hazard {_Name="sumcuisine", _Somme=db.DiagTabs.Sum(p => p.Cuisine) , _Absolute = Math.Abs(9.5 - (db.DiagTabs.Sum(p => p.Cuisine)))}, 
                                 new Hazard {_Name="sumefeminin", _Somme=db.DiagTabs.Sum(p => p.Feminin), _Absolute = Math.Abs(9.5 - (db.DiagTabs.Sum(p => p.Feminin)))},
                                 new Hazard {_Name="sumtienmain", _Somme=db.DiagTabs.Sum(p => p.Tienmain) , _Absolute = Math.Abs(9.5 - (db.DiagTabs.Sum(p => p.Tienmain)))},
                                 new Hazard {_Name="sumbureau", _Somme=db.DiagTabs.Sum(p => p.Bureau) , _Absolute = Math.Abs(9.5 - (db.DiagTabs.Sum(p => p.Bureau)))}  
                                    };
     
                foreach (Hazard item in pets)
                {
                    double ValeurMax = item._Absolute[0]; // on initialise,  pour l'instand VarMax egal a valeur de l'index 0    
     
     
                    for (int i = 0; i < pets.Length; i++)
                    {                  
                            if (_Absolute[i] < ValeurMax)
                            {
                                ValeurMax = _Absolute[i];
                            }                                               
                        }               
                }
                return _Name;
            }
            }
    ce code n'est pas fonctionnelle car "double ValeurMax = item._Absolute[0]" ne fonctionne pas , le [] ne peut pas être employer sur des valeurs double du coup je ne sait pas trop les modification à faire...
    Je veut juste récupérer le nom de la colonne dont la somme s'approche le plus d'une valeur choisi, ici 9,5

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 153
    Points : 25 071
    Points
    25 071
    Par défaut
    oui, j'avais bien pensé que si j'avais bien compris mon post ne servirait à rien ^^

    si on part d'un tableau de nom/sum, je vois bien un truc dans le genre :

    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
     
    {
        double sumplusprès = 0;
        foreach (void ligne_loopVariable in tableau) {
            ligne = ligne_loopVariable;
            if (abs(ligne.sum - recherché) < sumpluspres)
                sumplusprès = abs(ligne.sum - recherché);
        }
     
        string nomplusprès = null;
        foreach (void ligne_loopVariable in tableau) {
            ligne = ligne_loopVariable;
            if (abs(sumplusprès - recherché) == sumplusprès) {
                nomplusprès = ligne.nom;
                break; // TODO: might not be correct. Was : Exit For
            }
        }
    }
    (traduit du vb.net, pas regardé le c# obtenu)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Octobre 2015
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2015
    Messages : 98
    Points : 59
    Points
    59
    Par défaut
    Mmmm ça ma l'air sympathique tous ça!

    Merci pour ton aide!
    j'exploite ça ce soir après le boulot et te fait un retour . La nuit va être courte

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2002
    Messages : 332
    Points : 502
    Points
    502
    Par défaut
    Je ne sais pas si j'ai bien compris le besoin. J'ai simplifié et fait un exemple.

    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
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using Microsoft.VisualStudio.TestTools.UnitTesting;
     
    namespace UnitTestProject1
    {
        [TestClass]
        public class UnitTest1
        {
            [TestMethod]
            public void TestMethod1()
            {
                var values = new List<Tuple<string, int>>
                {
                    new Tuple<string,int>("value_1", 1),
                    new Tuple<string,int>("value_2", 13),
                    new Tuple<string,int>("value_3", 666)
                };
     
                const int testValue = 99;
     
                var nearest = (from v in values where Math.Abs(testValue - v.Item2) == values.Min(x => Math.Abs(testValue - x.Item2)) select v).First();
     
                Assert.AreEqual(13, nearest.Item2);
            }
        }
    }

  7. #7
    Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Octobre 2015
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2015
    Messages : 98
    Points : 59
    Points
    59
    Par défaut
    merci pour vos réponses très instructives. J'ai tester les 2 et mon coeur balance

    @Babyneedle j'ai repris ton exemple ce qui me donne ceci:


    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
     
        public class Hazard
        {
            public void Effet()
            {
                DiagEntities db = new DiagEntities();
                var values = new List<Tuple<string, int>>
                                                    {
                                                        new Tuple<string,int>("sumvivant", db.DiagTabs.Sum(p => p.Vivant)),
                                                        new Tuple<string,int>("sumpetit", db.DiagTabs.Sum(p => p.Petit)),
                                                        new Tuple<string,int>("summanger", db.DiagTabs.Sum(p => p.Manger)),
                                                        new Tuple<string,int>("sumbricolage", db.DiagTabs.Sum(p => p.Bricolage)),
                                                        new Tuple<string,int>("sumeanimal", db.DiagTabs.Sum(p => p.Animal)),
                                                        new Tuple<string,int>("sumcuisine", db.DiagTabs.Sum(p => p.Cuisine)),
                                                        new Tuple<string,int>("sumefeminin", db.DiagTabs.Sum(p => p.Feminin)),
                                                        new Tuple<string,int>("sumtienmain", db.DiagTabs.Sum(p => p.Tienmain)),
                                                        new Tuple<string,int>("sumbureau", db.DiagTabs.Sum(p => p.Bureau))
                                                    };
     
                const int testValue = 9;
     
                var nearest = (from v in values where Math.Abs(testValue - v.Item2) == values.Min(x => Math.Abs(testValue - x.Item2)) select v).First();
     
                //Assert.AreEqual(13, nearest.Item2);
            }
        }

    J'ai exclu la dernière ligne "Assert.AreEqual(13, nearest.Item2);" car je ne la comprend pas . Elle correspond a une commande du test unitaire je suppose? Une comparaison d'égalité ?

    Puis-je récupérer sur une autre page du type:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     public partial class pagetestEF : System.Web.UI.Page
        {       
            protected void Page_Load(object sender, EventArgs e)
            {
                 // code ...
            }
    }
    en appelant la méthode "Effet" de la class Hazard, le nom de la colonne trouvé mais dans un label ?


    @Pol63 merci pour le code c'est le bloc que j'ai mis 8 jours a tenter de pondre et qui ne marche toujours pas... Comme quoi c'est un métier
    Par contre je me demandais, sur le même type de requête que plus haut mais écrit en LinQ Dynamic avec des étoiles plein les yeux

    (ex de requete LinQ Dynamic)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    string testimo = "Vivant = 1 AND Manger = 0";
                using (var db = new DiagEntities())
                {
                    var requete9 = (db.DiagTabs
                                    .Where(testimo)
                                    .Select(" new(Reponse, Vivant, Manger)")).ToListAsync();
     
                    // affichage de la réponse dans un gridview
                    Rita1.DataSource = requete9.Result;
                    Rita1.DataBind();
    Est-ce que selon toi LinQ dynamic fonctionnerait aussi sur le bloc que tu as écrit (avec les noms de variable qui vont bien évidement)?
    Parce que si on peut concaténer à tous va, avec juste un using en haut de page je vais pas me gêner )

    Encore merci de votre aide. Bonne nuit

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2002
    Messages : 332
    Points : 502
    Points
    502
    Par défaut
    Oui c'est un test unitaire. Une habitude à prendre le plus tôt possible est de décomposer les problèmes. L'approche TDD permet de décomposer les problématiques mais aussi leurs réponses sous forme fonctionnelle.

    En enlevant les distractions comme les pages web, tu peux te concentrer à créer une méthode qui va répondre au besoin.

    Ensuite, il suffit d'encapsuler et d'invoquer, par exemple, d'une page web.

  9. #9
    Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Octobre 2015
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2015
    Messages : 98
    Points : 59
    Points
    59
    Par défaut
    Un Grand merci a tous les 2.
    Ceci clos 8 jours de galère .

    J'ai abandonné l'encapsulation et la création d'une méthode. J'y reviendrai plus tard mais c'est trop compliquer pour mon petit niveau. Jamais réussi a sortir simplement dans une autre page le simple nom de cette foutu colonne .

    Bref je l'ai fait sous la forme d'une fonction que je donne pour ceux qui aurait le même problème
    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
     
    {
                        DiagEntities db = new DiagEntities();
                        var Values = new List<Tuple<string, int>>
                                                    {
                                                        new Tuple<string,int>("sumvivant", db.DiagTabs.Sum(p => p.Vivant)),
                                                        new Tuple<string,int>("sumpetit", db.DiagTabs.Sum(p => p.Petit)),
                                                        new Tuple<string,int>("summanger", db.DiagTabs.Sum(p => p.Manger)),
                                                        new Tuple<string,int>("sumbricolage", db.DiagTabs.Sum(p => p.Bricolage)),
                                                        new Tuple<string,int>("sumeanimal", db.DiagTabs.Sum(p => p.Animal)),
                                                        new Tuple<string,int>("sumcuisine", db.DiagTabs.Sum(p => p.Cuisine)),
                                                        new Tuple<string,int>("sumefeminin", db.DiagTabs.Sum(p => p.Feminin)),
                                                        new Tuple<string,int>("sumtienmain", db.DiagTabs.Sum(p => p.Tienmain)),
                                                        new Tuple<string,int>("sumbureau", db.DiagTabs.Sum(p => p.Bureau))
                                                    };
                    double totaligne = db.DiagTabs.Count();  // nombre de ligne dans le tableau
                    double lavaleur = totaligne / 2;         // nbe ligne dans le tableau divisé par 2
                    Response.Write(lavaleur.ToString());    // affiche lavaleur 
     
                    var nearest = (from v in Values where Math.Abs(lavaleur - v.Item2) == Values.Min(x => Math.Abs(lavaleur - x.Item2)) select v).First();
     
                        bibi1.Text = nearest.ToString(); // affiche la ligne entiere Nom colonne + somme colonne
                        Response.Write(nearest.Item1);  // affiche  juste le nom de la colonne
     
                    bibi2.DataSource = Values;     // affiche le tableau entier de toute les somme du tableau
                    bibi2.DataBind();
                    }
    Je vais a présent essayer de factoriser la requête sur une seule ligne et de faire la même requête pour une table SQL non définie (je suis sur une petite table de test, la vrai doit y' avoir 200 colonne je vais pas toute les écrire quand même ) mais ceci est une autre histoire.

    Pour moi sujet résolu.
    Encore merci de votre aide

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

Discussions similaires

  1. [Python 2.X] Creation d'un classe pour incrémenter une liste
    Par nekcorp dans le forum Général Python
    Réponses: 9
    Dernier message: 13/02/2015, 13h40
  2. Outils ou Classe pour obtenir un WSDL à partir d'une classe PHP
    Par denisdlu dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 21/07/2014, 12h17
  3. Réponses: 8
    Dernier message: 23/06/2006, 22h53
  4. thread dédié à une classe pour lui "donner vie"
    Par Dje14 dans le forum Threads & Processus
    Réponses: 5
    Dernier message: 02/06/2005, 16h46
  5. Réponses: 7
    Dernier message: 08/01/2005, 13h24

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