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

Linq Discussion :

Question de base LINQ


Sujet :

Linq

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 202
    Par défaut Question de base LINQ
    Bonjour, dans ce code, j'ai du mal à comprendre ce que symbolise "p", il n'y a pas de p déclaré mais pourtant j'ai l'impression qu'il s'agit d'une instance de la classe Personne.
    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
     
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    namespace test_LINQMyBook
    {
        class Program
        {
     
     
            static void Main(string[] args)
            {
                      List<Pers> lPers = new List<Pers>
                      {
                          new Pers {Nom="Joe", Age=30}, new Pers {Nom="Arnaud",Age=26}, new Pers {Nom="Hans",Age=85}, new Pers {Nom="Arthur",Age=4}
                      };
     
                      var personnes = from p in lPers select p.Nom; // ou var personnes = lPers.Select (p =>p.Nom);
                      foreach (string s in personnes)
                      { Console.WriteLine(s); Console.ReadLine(); }
            }
        }
    }
    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
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    namespace test_LINQMyBook
     
    {
        class Pers
        {
            public string Nom { get; set; }
            public int Age { get; set; }
        }
     
    }

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    1 377
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 377
    Par défaut
    Effectivement question de base et pour ça tu peux trouver facilement la réponse dans la documentation Microsoft (msdn)

    dans l'expression :

    p est une "range variable" et lpers est la source de donnée. p représente chaque élément de la source et il est donc fortement typé selon le typage de la source. Sa portée se limite à la requête

    A+
    Échouer, c'est avoir la possibilité de recommencer de manière plus intelligente.

    Twitter Blog Mon site

    Mon article sur l'agilité

  3. #3
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Pour le cas Select(p=>p.Nom), il faut comprendre plusieurs choses et notamment que la signature est comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IEnumerable<TDest> Select<TSrc,TDest>(this IEnumerable<TSrc> source, Func<TSrc,TDest> selector)
    De ceci, on en tire plusieurs choses: C'est une méthode qui s'applique à un IEnumerable<TSrc>, ici un IEnumerable<Personne> (en fait c'est une méthode d'extension mais c'est un détail). Ensuite, on passe comme paramètre un délégué (c'est à dire un pointeur de fonction) qui pour un TSrc renvoie un TDest. Tu pourrais très bien créer une fonction dans ton code comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public String SelecteurNom(Personne p)
    {
        return p.Nom;
    }
    et l'utiliser comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var noms = mesPersonnes.Select(SelecteurNom);
    Le p => p.Nom est une expression lambda, c'est à dire une fonction anonyme.
    On peut voir la même notation qu'en math, quand tu as f(x)=x² par exemple, tu peux aussi écrire x -> x² la fonction qui a x associe le carré de x.
    La détermination du type du paramètre se fait par inférence de type, c'est à dire que comme on sait qu'on sait qu'on travaille une collection de TSrc, alors p est un TSrc. Ici, c'est une collection de Personne donc p est une Personne.
    Lorsque tu compiles, le compilateur va créer à ta place la méthode comme si tu avais déclaré SelecteurNom.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 202
    Par défaut
    Merci pour vos lumières

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

Discussions similaires

  1. Question de base sur les classes
    Par deaven dans le forum C++
    Réponses: 3
    Dernier message: 27/11/2005, 16h20
  2. Réponses: 4
    Dernier message: 20/11/2005, 21h46
  3. question de base
    Par tuxedo dans le forum Langage SQL
    Réponses: 11
    Dernier message: 05/04/2005, 15h28
  4. [Débutant] Question de base sur le BDE et les SGBD
    Par Invité dans le forum Bases de données
    Réponses: 3
    Dernier message: 15/03/2005, 08h45
  5. Question de base
    Par xinu1.1 dans le forum PostgreSQL
    Réponses: 8
    Dernier message: 03/02/2005, 22h14

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