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 :

Linq into en fonction Lambda - orderby


Sujet :

Linq

  1. #1
    Invité
    Invité(e)
    Par défaut Linq into en fonction Lambda - orderby
    Bonsoir,

    J'ai écris ce code et je cherche l'équivalent avec un fonction lambda, mais je n'arrive pas à trouver comment faire:

    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
                var fcts1 = from f in mdc.Fonctions
                            join u in mdc.Users on f.Id equals u.Fonction into usrs
                            orderby f.Nom
                            select new
                            {
                                Fonction = f,
                                Users = usrs
                            };
     
                Console.WriteLine("\nListe des utilisateurs par fonction");
                foreach (var f in fcts1)
                {
                    Console.WriteLine("{0}", f.Fonction.Nom);
                    foreach (var u in f.Users)
                    {
                        Console.WriteLine("\t{0} {1}", u.Nom, u.Prenom);
                    }
                }
    Je pensais à quelquechose du genre suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
                var fcts2 = mdc.Fonctions
                            .Join(mdc.Users,
                                  f => f.Id,
                                  u => u.Fonction,
                                  (f, u) => new
                                  {
                                      Fonction = f,
                                      Users = u
                                  }
                            );
    mais cela ne fonctionne pas.


    Question subsidiaire :
    Comment ajouter sur order sur le join ?
    Je voudrais obtenir les fonctions par ordre alphabétique et pour chaque les utilisateur triés pas nom, prénom

    Les essais suivants ne compilent pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    orderby f.Nom, u.Nom, u.Prenom
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    orderby f.Nom, usrs.Nom, usrs.Prenom
    pour l'équivalent de ces order en fonction lambda, je ne sais pas du tout...

    Merci de votre aide.
    Ben
    Dernière modification par Invité ; 28/02/2016 à 13h35.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    J'ai trouvé comment faire, il faut utiliser la méthode GroupJoin au lieu de Join :

    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
                var fcts2 = mdc.Fonctions
                            .GroupJoin(mdc.Users,
                                  f => f.Id,
                                  u => u.Fonction,
                                  (f, u) => new
                                  {
                                      Fonction = f,
                                      Users = u
                                  }
                            );
     
                Console.WriteLine("\nListe des utilisateurs par fonction");
                foreach (var f in fcts2)
                {
                    Console.WriteLine("{0}", f.Fonction.Nom);
                    foreach (var u in f.Users)
                    {
                        Console.WriteLine("\t{0} {1}", u.Nom, u.Prenom);
                    }
                }
    Par contre, je bloque toujours pour trier les données utilisateurs.
    Si quelqu'un a une idée... Merci d'avance

  3. #3
    Invité
    Invité(e)
    Par défaut
    De ce que j'ai cru comprendre, le code suivant devrait fonctionner, mais en fait non

    Le code bloque dans le premier foreach avec une exception 'System.Security.VerificationException' (Informations supplémentaires : Cette opération pourrait déstabiliser le runtime)

    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
                var fcts1 = from f in mdc.Fonctions
                            join u in mdc.Users on f.Id equals u.Fonction into usrs
                            orderby f.Nom
                            select new
                            {
                                Fonction = f,
                                Users = from u2 in usrs
                                        orderby u2.Nom, u2.Prenom
                                        select u2
                            };
     
                var fcts2 = mdc.Fonctions
                            .GroupJoin(mdc.Users,
                                  f => f.Id,
                                  u => u.Fonction,
                                  (f, u) => new
                                  {
                                      Fonction = f,
                                      Users = u.OrderBy(p => p.Nom).ThenBy(p => p.Prenom)
                                  }
                            )
                            .OrderBy(g => g.Fonction.Nom);
     
                Console.WriteLine("\nListe des utilisateurs par fonction");
                foreach (var f in fcts1)
                {
                    Console.WriteLine("{0}", f.Fonction.Nom);
                    foreach (var u in f.Users)
                    {
                        Console.WriteLine("\t{0} {1}", u.Nom, u.Prenom);
                    }
                }
    (J'ai la même erreur en utilisant fcts1 ou fcts2 dans le foreach)

Discussions similaires

  1. Fonction lambda en paramètre d'une fonction
    Par Kaluza dans le forum Langage
    Réponses: 7
    Dernier message: 05/12/2011, 16h25
  2. [C++11] Templates variadiques et fonctions lambdas
    Par Steph_ng8 dans le forum Langage
    Réponses: 2
    Dernier message: 06/10/2011, 18h10
  3. Réponses: 8
    Dernier message: 12/04/2011, 21h39
  4. les fonction lambda
    Par yan dans le forum Langage
    Réponses: 18
    Dernier message: 28/02/2011, 17h02
  5. Debogage : step into et fonctions "systèmes"
    Par troumad dans le forum Code::Blocks
    Réponses: 6
    Dernier message: 12/12/2009, 13h56

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