Requête LINQ

Résolu/Fermé
sympatiqueCCM Messages postés 358 Date d'inscription jeudi 5 octobre 2006 Statut Membre Dernière intervention 26 juin 2023 - 1 oct. 2021 à 20:11
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 - 3 oct. 2021 à 07:43
Bonjour,

J'essaie de faire une requête LINQ et d'afficher les résultats dans une ListBox.
J'ai essayé de me guider sur des exemples mais ça ne fonctionne pas.

J'aurais besoin d'un coup de main.
Ca m'aiderais a mieux comprendre

Voici le code

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // déclarer une liste de personnes
            List<Personne> personnes = new List<Personne>();
            personnes.Add(new Personne(1, "Raymond", "Fournier"));
            personnes.Add(new Personne(2, "Louise", "Bellefeuille"));
            personnes.Add(new Personne(3, "Mireille", "Fournier"));
            personnes.Add(new Personne(4, "Louise", "Bernard"));
            personnes.Add(new Personne(5, "Raymond", "Lamontagne"));


            // declarer une liste d'adresse
            List<Adresse> adresses = new List<Adresse>();
            adresses.Add(new Adresse(1, 132, "Ch. Ducharme", "Val-des-bois"));
            adresses.Add(new Adresse(2, 1234, "rue Hubert", "Gatineau"));
            adresses.Add(new Adresse(3, 18255, "rue Sherbrooke", "Montreal"));
            adresses.Add(new Adresse(4, 705, "rue Harbour", "St-Hubert"));
            adresses.Add(new Adresse(5, 5235, "ave. Papineau", "Montreal"));


            // Requete LINQ
            //var resultat = from p in personnes where p.nom .Contains ("Fournier")select p;
            var resultat = personnes.Select(p => p.nom == "Fournier").ToList ();

            //Remplie la List
            foreach (var p in personnes )
            {
                listBox1.Items.Add(p);
            }
        }
    }


Merci beaucoup de votre aide.



Configuration: Windows / Chrome 94.0.4606.61

5 réponses

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 331
1 oct. 2021 à 22:47
personnes.Select(p => p.nom == "Fournier") 

En gros, tu fais un Select donc tu extrais un boolen indiquant si la valeur est égale à ...

Je pense que tu visais plus un Where à la place du Select.
1
sympatiqueCCM Messages postés 358 Date d'inscription jeudi 5 octobre 2006 Statut Membre Dernière intervention 26 juin 2023 11
2 oct. 2021 à 18:06
Merci NHenry,

Ca ne fonctionne pas non plus.

Si je veux lister les resultats d'une requete dans un dataGridView.

Je fais comment pour cela.

Merci encore
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931
2 oct. 2021 à 18:32
Bonjour

au départ, tu parles de Listbox et maintenant de datagridview, mais sans nouveau code.
Donc on va parler de ce qu'on peut parler pour l'instant, la ListBox.

NHenry (que je salue) a mis le doigt sur un premier problème, à savoir que ce que tu cherches à faire c'est une clause where => on prend tous les enregistrements "où" le nom est Fournier.

La clause select permet de récupérer un ou plusieurs champ, dans ta question précédente, je t'ai montré comment sélectionner les prénoms dans une liste de contact.

Le 2eme problème se situe là
            foreach (var p in personnes )
            {
                listBox1.Items.Add(p);
            }

La collection personnes c'est la "base de données complètes", le résultat de la requête est dans la collection resultat.

En outre, toujours lors de ta précédente question, j'ai essayé de te montrer les avantages du binding et bien ici ça donnerait

listBox1.DataSource = null;//Pour reseter au cas où
listBox1.DataSource = resultat;
listBox1.DisplayMember = "Prenom";

Ca affichera la valeur de la propriété Prenom de chaque enregistrement de la collection.

Pour le datagridwiev, et toujours en binding, soit tu affectes sa propriété Datasource (mais tu ne peux personnaliser les colonnes) ou via un bindingsource comme dans le tuto que je t'ai déjà proposé.
0
sympatiqueCCM Messages postés 358 Date d'inscription jeudi 5 octobre 2006 Statut Membre Dernière intervention 26 juin 2023 11
3 oct. 2021 à 01:47
Merci Whismeril,
Ca fonctionne bien pour la ListBox. L'Instruction control.DataSource = null; est très importante.
Ca fonctionne bien aussi pour le dataGridView.
J'ai mis des Titre a chaques colonnes.
J'ai mis un controle bindingSource dans la propriété DataSource.

Et dans "Edit columns"j'ai lié chaque colonnes avec la propriété Personne correspondantes.

dataGridView1.DataSource = null;
            dataGridView1.DataSource = resultat.ToList ();


Je te remercie beaucoup de ton aide.
j'apprend beaucoup avec tes interventions.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931
3 oct. 2021 à 07:43
Oui
control.DataSource = null;
est importante même si je trouve un peu bête que le fait de réaffecter une nouvelle source de données ne resete pas d'office...

Bonne continuation
0