Linq et list of incrémentation variable [Résolu]

cs_JMO 1838 Messages postés jeudi 23 mai 2002Date d'inscription 1 avril 2018 Dernière intervention - 26 avril 2017 à 21:33 - Dernière réponse : Whismeril 11418 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 24 avril 2018 Dernière intervention
- 27 avril 2017 à 10:34
Bonjour le Forum,

Avec
Option Strict On
Option Explicit On
et en ayant décoché la référence Microsoft.VisualBasic

Je dispose d'une List Of dont une variable string contient
003
010
012
002

Je souhaite récupérer dans une variable string le + grand nombre et faire + 1 sur celui-ci.

J'ai utilisé :
        Dim newCode As String

        For Each item In ListePersonnel.Select(Function(c) c.Code).OrderByDescending(Function(c) c.ToString)
            newCode = CStr(CInt(CDbl(item.ToString) + 1).ToString("000"))
            Exit For
        Next
        MessageBox.Show(newCode)

newCode me renvoie correctement "013".

Est-ce la bonne méthode ???

J'essaie de passer par une syntaxe du genre
        Dim test As String = (From y In ListePersonnel.Select(Function(x) x.Code).OrderByDescending(Function(c) c.ToString)).First.ToString
test = CStr(CInt(CDbl(test) + 1).ToString("000"))
MessageBox.Show(test)

test me renvoie correctement "013".

Merci de vos suggestions.

jean-marc
Afficher la suite 

6 réponses

Répondre au sujet
cs_JMO 1838 Messages postés jeudi 23 mai 2002Date d'inscription 1 avril 2018 Dernière intervention - 26 avril 2017 à 22:53
0
Utile
1
Effectivement c'est pas très lisible
        Dim test As String = CStr(CInt(CDbl((From y In ListePersonnel.Select(Function(x) x.Code).OrderByDescending _
                                             (Function(c) c.ToString)).First.ToString) + 1).ToString("000"))
        MessageBox.Show(test)
wayne2017 57 Messages postés jeudi 23 février 2017Date d'inscription 10 mai 2017 Dernière intervention - 27 avril 2017 à 05:26
Bonjour cs_JMO

effectivement le script il est bon
Commenter la réponse de cs_JMO
Whismeril 11418 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 24 avril 2018 Dernière intervention - 27 avril 2017 à 07:27
0
Utile
3
Bonjour JM,

Si tous les "nombres" de la liste ont bien ce format alors l'ordre alphabétique = l'ordre numérique.
Donc pour trier tu n'a is pas besoin de tous les convertir, sur 1000 enregistrements tu vas gagner un peu de temps d'exécution.

En plus, tu peux sortir les valeurs min et max avec le sujet méthodes éponymes.


Dim toto() as string = {"003","010","012","002"}
Dim max as string = (Convert.Tostring(toto.Max()) + 1).Tostring("000")

cs_JMO 1838 Messages postés jeudi 23 mai 2002Date d'inscription 1 avril 2018 Dernière intervention - 27 avril 2017 à 08:19
Bonjour Whismeril,
Merci pour tes explications.
J'ai essayé ton code (avec correction)
                Dim toto() As String = {"003", "010", "012", "002"}
Dim max As String = (CDbl(Convert.ToString(toto.Max())) + 1).ToString("000")
max retourne bien "013"

Par contre, je n'arrive pas à adapter avec ma ListePersonnel.

Bonne journée,
jean-marc
Whismeril 11418 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 24 avril 2018 Dernière intervention - 27 avril 2017 à 09:04
Je m'aperçois qu'en j'ai tapé une coquille

Dim toto() as string = {"003","010","012","002"}
Dim max as string = (Convert.ToInt32(toto.Max()) + 1).Tostring("000")


Pour l'adaptation à ta liste, un truc comme ça
ListePersonnel.Max(Function(c) c.Code)


De tête, comme le message précédent ;)
Whismeril 11418 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 24 avril 2018 Dernière intervention > Whismeril 11418 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 24 avril 2018 Dernière intervention - 27 avril 2017 à 10:34
En complément, Max parcoure la collection une seule fois, alors qu'un tri la parcourra autant de fois que nécessaire.
Donc Max est plus rapide, ou pareil quand la collection est déjà triée.
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.