Je rencontre actuellement un soucis avec l'utilisation de linq.
Je m'explique, je possède 2 tables (RH, FICHIER) qui sont alimentées respectivement d'un fichier Excel et d'un fichier Texte.
La relation des 2 table se fond grâce à un champs ou l'on retrouve la même données
Je veux afficher tout ce qui se trouve de la table FICHIER qui ne se trouve pas dans RH.
J'étais parti pour faire quelque chose de ce genre :
Dim req =(From rh In _dataTableRH Join fichier In _dataTableFichier On UCase(RTrim(rh("PrenomNom"))) Equals UCase(RTrim(fichier("nom Utilisateur"))) Select New With { .nomUtilisateur = UCase(RTrim(fichier("nom Utilisateur"))) }).ToList
Qui ne fonctionne pas...
Ça fait 2 jours que je parcours le web et j'ai l'impression de comprendre de moins en moins alors je fais appel à vous.
Etape n°1, appliquer la dernière ligne de ma signature et retirer l'import automatique de l'espace de nom "Microsoft.VisualBasic" (onglet "Références" des propriétés du projet).
Une fois cela fait, corriges ton code :
UCase -> MaChaine.ToUpper
...
Merci pour une réponse aussi rapide NHenry.
Ceci dit, à quoi correspond Option Strict ? J'ai des erreurs de partout et je ne comprend pas cette trop pourquoi.
Par exemple un simple :
D'accord merci pour l'explication. Je vais essayé de travailler avec cette méthode.
Par contre il va être compliqué de modifier entièrement mon code car j'arrive sur l'aboutissant de mon application et ça risque de me prendre du temps lol.
C'est possible de m'aider même si cela est en option Strict ? J'ai compris le principe donc je devrai trouver mes petits.
L'usage de Option Strinct Option Explicit et le retrait de l'import de Microsoft.ViusualBasic est une base indispensable, je travaille quotidiennement avec VB.NET et je ne peux pas concevoir développer sans.
L'usage de ces 3 choses permet d'éviter un très grand nombre d'erreur.
Il est possible comme en VB6 de préciser si c'est On ou Off en entête des fichiers de code.
Astuce, tu peux aussi définit Option Infer, cette option permet d'éviter de déclarer le type si celui-ci est implicitement devinable, par exemple :
Dim MaChaine="UneChaine"
Dim UnEntier=123
Dim UnObjet=new Label
Cette option est très utile si tu utilise LINQ.
Sinon pour ajout utile, tu peux faire une liste des items à ignorer genre :
Dim Req1=Tout les items de la table RH
Dim Req2=Tout les items de FICHIER qui ne sont pas dans Req1
Maintenant je récupérer bien les données qui existent des 2 cotés.
Par contre, je n'arrive pas à afficher l'inverse à savoir tout ce qui n'existe pas.
J'ai procédé comme ceci (Avec le forçage de typage ;-) :
Dim reqFichier = From fichier In _dataTableFichier Where fichier.Field(Of String)("nom Utilisateur").Contains("BSG") = False And fichier.Field(Of String)("Entrepôt") = "BSG" Select New With { .nomUtilisateur = fichier.Field(Of String)("nom Utilisateur").ToUpper.Trim }
Dim reqRH = From rh In _dataTableRH Select New With { .nom = rh.Field(Of String)("Nom").ToUpper.Trim, .prénom = rh.Field(Of String)("Prénom").ToUpper.Trim, .PrenomNom = rh.Field(Of String)("PrenomNom").ToUpper.Trim }
Dim reqResult = (From fichier In reqFichier Select New With { .nom = fichier.nomUtilisateur } ).AsEnumerable.Except(From rh In reqRH Select New With { .nom = rh.PrenomNom }).ToList()
Je reviens pour annoncer que j'ai contourné mon problème en faisant une double boucle
du genre :
For Each f in FICHIER For Each r in RH Si correspondance exit For Next
Si pas correspondance ajout dans un dataTable temporaire Next
Du coup j'arrive a afficher les données voulu. C'est peut être moins optimisé qu'une requête mais mes 2 DataTable ne sont pas énorme. Maxi du maxi, 600 lignes de chaque coté.
Merci à toi en tout cas et je vais essayé de travailler avec Option Strict