Requete SQL via LINQ [Résolu]

kyoku59 49 Messages postés vendredi 23 mai 2008Date d'inscription 11 mars 2018 Dernière intervention - 21 janv. 2014 à 13:48 - Dernière réponse : kyoku59 49 Messages postés vendredi 23 mai 2008Date d'inscription 11 mars 2018 Dernière intervention
- 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 ;-)


--
Afficher la suite 

Votre réponse

8 réponses

NHenry 14250 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 10 août 2018 Dernière intervention - 21 janv. 2014 à 13:57
0
Merci
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é.
Commenter la réponse de NHenry
kyoku59 49 Messages postés vendredi 23 mai 2008Date d'inscription 11 mars 2018 Dernière intervention - 21 janv. 2014 à 17:47
0
Merci
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)


--
NHenry 14250 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 10 août 2018 Dernière intervention - 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.
Commenter la réponse de kyoku59
kyoku59 49 Messages postés vendredi 23 mai 2008Date d'inscription 11 mars 2018 Dernière intervention - 21 janv. 2014 à 21:47
0
Merci
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

--
NHenry 14250 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 10 août 2018 Dernière intervention - 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
kyoku59 49 Messages postés vendredi 23 mai 2008Date d'inscription 11 mars 2018 Dernière intervention - 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
Commenter la réponse de kyoku59
kyoku59 49 Messages postés vendredi 23 mai 2008Date d'inscription 11 mars 2018 Dernière intervention - 22 janv. 2014 à 11:19
0
Merci
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 ?
Commenter la réponse de kyoku59
kyoku59 49 Messages postés vendredi 23 mai 2008Date d'inscription 11 mars 2018 Dernière intervention - 23 janv. 2014 à 11:16
0
Merci
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

;-)
--
Commenter la réponse de kyoku59

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.