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 :

Question linq to SQL + datagrid + List [Débutant]


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Février 2013
    Messages : 15
    Par défaut Question linq to SQL + datagrid + List
    Bonjour à tous

    Actuellement en stage, je bloque sur un problème

    J'execute une requete (en linq to sql)
    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 results = from M in db.Mouvement
                              join A in db.Article on M.Article_ID equals A.Article_ID
                              join D in db.Document on M.Document_ID equals D.Document_ID
                              join dc in db.DetailColis on M.Mouvement_ID equals dc.Mouvement_ID
     
                              where  D.Acteur_ID == monid
                              && D.Calendrier.Periode == periode
                              && D.Calendrier.Annee == annee
                              orderby A.Code
     
                              select new
                              {
                                 A.Code,
                                 A.Code_fournis,
                                  A.Ref_fournis,
                                  D.Destin_ID,
                                  M.Qte,
                                  GestionColis = dc.QteColis + " " + dc.NumColis
                              }
                                 ;
    Qui me retourne par exemple

    CF28 -- GTS -- 1092--1000099--8,00--5 1
    CF28 -- GTS -- 1092--1000099--8,00--5 2

    Comme vous le voyez, ce qui est en gras est identique

    C'est pourquoi j'aimerai avoir, en retour, une seule ligne qui affiche

    CF28 -- GTS -- 1092--1000099--8,00--5 1 5 2

    Le problème, c'est que je n'arrive pas à faire un groupby qui m'affiche ça et que, en plus, ma variable results est le DataSource de mon DataGrid, qui doit donc afficher cette unique ligne

    J'ai essayé de convertir la variable en liste et de modifier cette liste pour en faire la source mais impossible

    Quelqu'un a une idée, une piste ?

    Merci

  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 : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Il te manquait un GroupBy sur DetailColis, puis une aggregation des strings dans GestionColis :
    Code C# : 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
    var results = from M in db.Mouvement
                  join A in db.Article on M.Article_ID equals A.Article_ID
                  join D in db.Document on M.Document_ID equals D.Document_ID
                  join dc in db.DetailColis on M.Mouvement_ID equals dc.Mouvement_ID
     
                  where D.Acteur_ID == monid
                  && D.CalendrierPeriode == periode
                  && D.CalendrierAnnee == annee
                  orderby A.Code
     
                  group dc by new { A.Code, A.Code_fournis, A.Ref_fournis, D.Destin_ID, M.Qte } into g
     
                  select new
                  {
                      g.Key.Code,
                      g.Key.Code_fournis,
                      g.Key.Ref_fournis,
                      g.Key.Destin_ID,
                      g.Key.Qte,
                      GestionColis = string.Join(" ", (from t in g
                                                       select t.QteColis + " " + t.NumColis).ToArray())
                  };
    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
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Février 2013
    Messages : 15
    Par défaut
    Juste MERCI !!



    Je crois que je n'avais pas compris le principe du groupe by !

    Et encore moins
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    string.Join(" ", (from t in g
                                                                   select t.QteColis + " " + t.NumColis).ToArray())
    Merci beaucoup en tout cas, c'était très clair !

  4. #4
    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 : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Dans l'absolu il faudrait utiliser la fonction Aggregate, et faire un truc du genre :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    GestionColis = (from t in g
                    select t.QteColis + " " + t.NumColis).Aggregate((current, next) => current + " " + next)
    Mais ça ne fonctionne pas en LinQ To SQL, donc il faut feinter et utiliser string.Join
    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.

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

Discussions similaires

  1. Trier une liste avec LINQ to SQL
    Par anthride dans le forum Linq
    Réponses: 2
    Dernier message: 12/02/2010, 10h40
  2. LINQ To SQL : Question design
    Par cobolfingaz dans le forum C#
    Réponses: 4
    Dernier message: 22/01/2009, 14h32
  3. [Linq to Sql] Insert ou update ? telle est la question ...
    Par Ntotor dans le forum Accès aux données
    Réponses: 5
    Dernier message: 19/11/2008, 14h24
  4. Réponses: 12
    Dernier message: 03/11/2008, 15h33

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