2010-07-06 69 views
2

我在VB.NET LINQ中有这个具有挑战性的任务。 我有来自不同服务器的2个数据库。我无法链接数据库。该数据是从数据库检索为:VB.NET LINQ加入

  • DB1

  • CLIENT_ID Engagement_ID说明已启用

  • 600 10真公司1
  • 600 20假Company2的
  • 700 10 True Company3
  • DB2
  • CLIENT_ID Engagement_ID说明已启用
  • 600 5真公司1
  • 600 10假Company2的
  • 500 30真公司3

在前端我需要添加的接合存在于DB1中但不在DB2中的客户端。我使用API​​调用来添加约定,因为我无法更新数据库。 在这个例子中,我需要将DB1的第二条记录添加到DB2,因为客户端ID 600存在于DB2中,并且客户端ID 600的参与ID 20在DB2中不存在。由于DB2中不存在客户端ID 700,因此无法将DB1的第三条记录添加到DB2。 我需要LINQ查询来返回记录,其中DB1.client_id = DB2.Client_ID和DB1.Engagement_ID <> DB2.Engagement_ID。如果LINQ查询返回数据表或某些数据结构中的记录,我可以遍历记录并进行api调用,并将客户端ID,参与ID,启用和描述作为参数传递给DB2。 请帮我解决这个问题。我试图做到这一点,但LINQ允许equijoins,我无法让它适用于DB1.client_id = DB2.Client_ID和DB1.Engagement_ID <> DB2.Engagement_ID。

的T SQL这个任务是:

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) 

我想这件T SQL转换为LINQ

在此先感谢

+0

同一个用户在同一问题:http://stackoverflow.com/questio ns/3189631/linq-to-objects/3190037#3190037 – spong 2010-07-06 21:21:00

+0

我改述了这个问题,并再次发布在http://stackoverflow.com/questions/3189631/linq-to-objects/3190037#3190037得到更好的答案 – 2010-07-07 14:28:07

回答

1

您可以添加第二个连接标准为Where子句:

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

谢谢回复。我以前尝试过,但它不起作用。 我将张贴TSQL此任务: SELECT * FROM DB1 左连接上DB1.client_ID = DB2.client_ID 和DB1.Engagement_ID = DB2.Engagement_ID DB2哪里DB2.CLient_ID是零和DB2.Engagement_ID为空 和DB1。client_id in(从DB2中选择client_id) 我试图将此T SQL转换为LINQ – 2010-07-06 17:24:39

+0

这给出了错误的结果。例如,如果e1具有密钥cid1和eid1,而e2具有密钥cid2和eid2,则这将返回结果,实际上,@nithin正在查找cid1存在于e2中而不是cid1和eid1的情况。 – Hogan 2010-07-06 21:22:00