2010-07-06 13 views
2

J'ai cette tâche difficile dans VB.NET LINQ. J'ai 2 bases de données de différents serveurs. Je ne peux pas lier les bases de données. Les données sont extraites des bases de données:VB.NET LINQ rejoindre

  • DB1

  • Client_ID Engagement_ID Activé Description de

  • 600 10 Vrai Company1
  • 600 20 Faux Company2
  • 700 10 True Company3
  • DB2
  • Client_ID Engagement_ID Activé Description de
  • 600 5 vrai Company1
  • 600 10 Faux Company2
  • 500 30 Vrai Company3

En fin avant je dois ajouter les Fiançailles des clients présents dans DB1 et non présents dans DB2. Je fais appel API pour ajouter les engagements que je ne peux pas mettre à jour la base de données. Dans cet exemple, j'ai besoin d'ajouter le deuxième enregistrement de DB1 à DB2 car l'ID client 600 existe dans DB2 et l'ID d'engagement 20 pour l'ID client 600 n'existe pas dans DB2. Je ne peux pas ajouter le troisième enregistrement de DB1 à DB2 car l'ID client 700 n'existe pas dans DB2. J'ai besoin de la requête LINQ pour retourner les enregistrements où DB1.client_id = DB2.Client_ID et DB1.Engagement_ID <> DB2.Engagement_ID. Si la requête LINQ renvoie les enregistrements dans une structure de données ou une structure de données, je peux parcourir les enregistrements et effectuer des appels api et transmettre l'ID client, l'ID d'engagement, l'option Enabled et la description en tant que paramètres pour mettre à jour DB2. S'il vous plaît aidez-moi avec ce problème. J'ai essayé de le faire mais LINQ autorise equijoins et je n'arrive pas à l'obtenir pour DB1.client_id = DB2.Client_ID et DB1.Engagement_ID <> DB2.Engagement_ID.

T SQL pour cette tâche est:

select * from DB1 
left join DB2 on DB1.client_ID = DB2.client_ID 
and DB1.Engagement_ID = DB2.Engagement_ID 
where DB2.CLient_ID is null and DB2.Engagement_ID is null 
and DB1.client_id in (select client_id from DB2) 

Je suis en train de convertir ce T SQL LINQ

Merci à l'avance

+0

même question par le même usager ici: http://stackoverflow.com/questio ns/3189631/linq-to-objects/3190037 # 3190037 – spong

+0

J'ai reformulé la question et je l'ai postée à nouveau sur http://stackoverflow.com/questions/3189631/linq-to-objects/3190037#3190037 pour obtenir une meilleure réponse –

Répondre

1

Vous pouvez ajouter le deuxième rejoindre critère comme Where clause:

Dim q = From e1 In db1 
     Join e2 In db2 On e1.Client_ID Equals e2.Client_ID 
     Where e1.Engagement_ID <> e2.Engagement_ID 
     Select e1, e2 
+0

Merci pour la réponse. J'ai déjà essayé ça mais ça ne marche pas. Je signalerai le TSQL pour cette tâche: select * from DB1 gauche rejoindre DB2 sur DB1.client_ID = DB2.client_ID et DB1.Engagement_ID = DB2.Engagement_ID où DB2.CLient_ID est nulle et DB2.Engagement_ID est nulle et DB1.client_id in (select client_id from DB2) J'essaie de convertir ce T SQL en LINQ –

+0

Cela donne de faux résultats. Par exemple, si e1 a les clés cid1 et eid1 alors que e2 a les clés cid2 et eid2 cela retourne un résultat, alors qu'en fait @nithin cherche le cas où cid1 existe dans e2 mais pas la paire cid1 et eid1. – Hogan