Requete SQL via LINQ

Résolu
kyoku59 Messages postés 54 Date d'inscription vendredi 23 mai 2008 Statut Membre Dernière intervention 21 septembre 2018 - 21 janv. 2014 à 13:48
kyoku59 Messages postés 54 Date d'inscription vendredi 23 mai 2008 Statut Membre Dernière intervention 21 septembre 2018 - 23 janv. 2014 à 11:16
Bonjour,

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.

En espérant trouver ma solution.

Merci à vous ;-)


--

5 réponses

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
21 janv. 2014 à 13:57
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
...

Ensuite, reviens, avec le code ainsi corrigé.
0
kyoku59 Messages postés 54 Date d'inscription vendredi 23 mai 2008 Statut Membre Dernière intervention 21 septembre 2018
21 janv. 2014 à 17:47
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 :
Me.grid.RowCount

devient

CStr(Me.grid.RowCount)


--
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
21 janv. 2014 à 18:25
Option Strict permet de forcer les conversion de type à être faites de manières explicites.
De plus, cela force le typage correct des variables.
0
kyoku59 Messages postés 54 Date d'inscription vendredi 23 mai 2008 Statut Membre Dernière intervention 21 septembre 2018
21 janv. 2014 à 21:47
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.

Merci à toi en tout cas

--
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
21 janv. 2014 à 22:05
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
0
kyoku59 Messages postés 54 Date d'inscription vendredi 23 mai 2008 Statut Membre Dernière intervention 21 septembre 2018
22 janv. 2014 à 05:59
ok ok
Une chose qui est cool c'est que j'utilise ton astuce a 99.99% dans mon développement, c'est rare que je ne le fait pas.

Je vais regarder pour ta solution et je reviendrai vous en dire plus

Merci
0
kyoku59 Messages postés 54 Date d'inscription vendredi 23 mai 2008 Statut Membre Dernière intervention 21 septembre 2018
22 janv. 2014 à 11:19
Re,

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()

une idée ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kyoku59 Messages postés 54 Date d'inscription vendredi 23 mai 2008 Statut Membre Dernière intervention 21 septembre 2018
23 janv. 2014 à 11:16
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

;-)
--
0
Rejoignez-nous