Linq et datable

Résolu
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 - 26 févr. 2017 à 12:30
Whismeril Messages postés 17805 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 27 septembre 2022 - 27 févr. 2017 à 08:35
Bonjour le Forum,

Je dispose d'un datatable qui contient
TRIGRAMME	Host		POLLER
ACC		server1		FR3PRD02
ACC		server2		FR3PRD01
AS0		server3		FR3PRD01
ASU		server8		FR3PRD01
ASU		server30	FR3PRD01
AXO		server50	FR3PRD02
Pour afficher
Nombre de host par poller
FR3PRD01	4
FR3PRD02	2
j'utilse
        Me.RichTextBoxDownload.Text += "Nombre de host par poller" & Environment.NewLine
        Dim querypoller = From row In hosts 'hosts est le datatable
           Group row By poller = row.Field(Of String)("POLLER") Into PollerGroup = Group
           Select New With {
               Key poller,
                   .host = PollerGroup.Select(Function(r) r.Field(Of String)("Host")).Distinct
               }

        Dim listpoller = New List(Of Tuple(Of String, Integer))
        For Each x In querypoller
            listpoller.Add(New Tuple(Of String, Integer) _
                           (x.poller.ToString, x.host.Count))
        Next
        listpoller.Sort()

        Dim result = From v In listpoller
                     Group v By v.Item1 Into TupleGroup = Group

        For Each value In result
            For Each item In value.TupleGroup
                Me.RichTextBoxDownload.Text += value.Item1 & Convert.ToChar(Keys.Tab) & _
                            item.Item2 & Environment.NewLine

            Next
        Next
Par contre, je n'arrive pas à afficher
FR3PRD01	4
		ACC	1
		AS0	1
		ASU	2
FR3PRD02	2
		ACC	1
		AXO	1
Auriez-vous une idée pour la requête à utiliser ?
Un host ne peut être assigné qu'à un poller.
Merci de vos suggestions.

jean-marc

2 réponses

Whismeril Messages postés 17805 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 27 septembre 2022 618
26 févr. 2017 à 22:20
Salut,

j'ai pas de datatable sous la main, j'ai fait avec une liste.
Public Class JMO2
    Public Property Code3Caracteres() As String

    Public Property Serveur() As String

    Public Property Poller() As String
End Class

Public Class HostParPoller
    Public Property Host() As String

    Public Property Nombre() As Integer
End Class

Public Class RequetteJMO
    Public Property Poller() As String

    Public Property Nombre() As Integer

    Public Property Hosts() As List(Of HostParPoller)
End Class


			Dim lesDonneesJMO As New List(Of JMO2)() From {
            New JMO2 With {.Code3Caracteres = "ACC", .Serveur = "server1", .Poller = "FR3PRD02"},
            New JMO2 With {.Code3Caracteres = "ACC", .Serveur = "server2", .Poller = "FR3PRD01"},
            New JMO2 With {.Code3Caracteres = "AS0", .Serveur = "server3", .Poller = "FR3PRD01"},
            New JMO2 With {.Code3Caracteres = "ASU", .Serveur = "server8", .Poller = "FR3PRD01"},
            New JMO2 With {.Code3Caracteres = "ASU", .Serveur = "server30", .Poller = "FR3PRD01"},
            New JMO2 With {.Code3Caracteres = "AXO", .Serveur = "server50", .Poller = "FR3PRD02"}}

        'nombre de host par poller
        Dim toto = (
            From y In lesDonneesJMO.GroupBy(Function(x) x.Poller)
            Select New RequetteJMO With
                   {
                       .Poller = y.Key,
                       .Nombre = y.Count(),
                       .Hosts = y.GroupBy(Function(z) z.Code3Caracteres).Select(Function(w) New HostParPoller With
                                                                                            {
                                                                                                .Host = w.Key,
                                                                                                .Nombre = w.Count()
                                                                                            }).ToList()
                   }).ToList()

0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 26
27 févr. 2017 à 08:17
Bonjour Whismeril,

Merci pour ce code.utilisant les collections et classes qui répond à mon besoin.
        For Each value In toto
MessageBox.Show(value.Poller & Convert.ToChar(Keys.Tab) & _
Convert.ToChar(Keys.Tab) & CStr(value.Nombre))
For Each item In value.Hosts
MessageBox.Show(item.Host.ToString & Convert.ToChar(Keys.Tab) & _
CStr(item.Nombre), value.Poller)
Next
Next

Bonne journée,
0
Whismeril Messages postés 17805 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 27 septembre 2022 618
27 févr. 2017 à 08:35
De rien
0