Précédent   Forum des professionnels en informatique > Dotnet > Accès aux données > Linq
Linq Forum d'entraide sur la manipulation de données avec Linq
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/11/2011, 10h06   #1
Candidat au titre de Membre du Club
 
Inscription : janvier 2004
Messages : 59
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 59
Points : 12
Points : 12
Par défaut Linq to Dataset, jointure externe et group by

Bonjour à tous

Je viens crier au secours pour une requête que je n'arrive pas à réaliser avec LINQ.

Je vous expose le problème :
- j'ai un dataset avec deux datatable issues de deux DB différentes, nommons les tbldb1, tbldb2.
- tbldb1 contient entre autres 2 champs qui m'intéressent : AREA, OBJET
- tbldb2 contient elle aussi 2 champs qui m'intéressent : OBJET, STATUT
- une AREA peut ne pas contenir d'objet

Je voudrais savoir, par AREA, le nombre de fois que les différents status apparaissent.

Par exemple :

Citation:
tbldb1
AREA - OBJET
1 - 1
1 -
1 -
1 - 2
1 - 4
2 -
2 - 3
Citation:
tbldb2
OBJET - STATUT
1 - 1
2 - 1
3 - 2
4 - 2
Et le résultat attendu :

Citation:
AREA - STATUT - COUNT
1 - 1 - 2
1 - 2 - 1
2 - 2 - 1
(éventuellement 1 - - 2 et 2 - - 1)
Mon équivalent en SQL devrait être un truc du style :

Code :
1
2
3
SELECT t1.AREA, t2.STATUT, COUNT(*)
FROM tbldb1 t1 LEFT OUTER JOIN tbldb2 t2 ON t1.OBJET = t2.OBJET
GROUP BY t1.AREA, t2.STATUT
Ca doit pas être compliqué mais j'y arrive pas

Merci d'avance

EDIT : petite précision, je bosse en VB.NET
CyBeRoN est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2011, 11h52   #2
Candidat au titre de Membre du Club
 
Inscription : janvier 2004
Messages : 59
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 59
Points : 12
Points : 12
Bon finalement je crois que je m'en suis sorti tout seul comme un grand, après deux jours de recherche

Voici le contenu de ma fonction si ça peut aider certains :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Dim t1 = ds.Tables("TBLDB1").AsEnumerable()
            Dim t2 = ds.Tables("TBLDB2").AsEnumerable()
 
            Dim query = From d In t1 _
                        Where d.Item("OBJET") IsNot DBNull.Value _
                        Group Join p In t2 On CInt(p("OBJET")) Equals CInt(d.Item("OBJET")) Into dp = Group _
                        From p In dp.DefaultIfEmpty() _
                        Select New With {.AREA = d.Item("AREA"), _
                                        .OBJET = d.Item("OBJET"), _
                                        .Statut = If(p Is Nothing, 0, p.Item("STATUT"))}
 
            Dim res = From row In query _
                      Group row By AREA = row.AREA, Statut = row.Statut Into Count() _
                      Order By AREA, Statut Ascending _
                      Select New With {.AREA = AREA, .Statut = Statut, .Total = Count}
 
 
            Return res.ToList
A bientôt
CyBeRoN est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h36.


 
 
 
 
Partenaires

Hébergement Web