Linq et datable [Résolu]

cs_JMO 1816 Messages postés jeudi 23 mai 2002Date d'inscription 7 décembre 2017 Dernière intervention - 26 févr. 2017 à 12:30 - Dernière réponse : Whismeril 10542 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 14 décembre 2017 Dernière intervention
- 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
Afficher la suite 

3 réponses

Répondre au sujet
Whismeril 10542 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 14 décembre 2017 Dernière intervention - 26 févr. 2017 à 22:20
0
Utile
1
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()

cs_JMO 1816 Messages postés jeudi 23 mai 2002Date d'inscription 7 décembre 2017 Dernière intervention - 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,
Commenter la réponse de Whismeril
Whismeril 10542 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 14 décembre 2017 Dernière intervention - 27 févr. 2017 à 08:35
0
Utile
De rien
Commenter la réponse de Whismeril

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.