【问题标题】:VB.NET LINQ joinVB.NET LINQ 连接
【发布时间】:2010-07-06 01:09:48
【问题描述】:

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

  • DB1

  • Client_ID Engagement_ID 启用说明

  • 600 10 真实公司1
  • 600 20 虚假公司2
  • 700 10 真正的公司3
  • DB2
  • Client_ID Engagement_ID 已启用说明
  • 600 5 真实公司1
  • 600 10 虚假公司2
  • 500 30 真实公司3

在前端,我需要添加存在于 DB1 中但不存在于 DB2 中的客户参与。由于无法更新数据库,我进行 API 调用以添加约定。 在此示例中,我需要将 DB1 的第二条记录添加到 DB2,因为 DB2 中存在客户 ID 600,而 DB2 中不存在客户 ID 600 的参与 ID 20。我无法将 DB1 的第三条记录添加到 DB2,因为 DB2 中不存在客户端 ID 700。 我需要 LINQ 查询来返回 DB1.client_id = DB2.Client_ID 和 DB1.Engagement_ID DB2.Engagement_ID 的记录。如果 LINQ 查询返回数据表或某些数据结构中的记录,我可以遍历记录并进行 api 调用,并将客户端 ID、参与 ID、启用和描述作为参数传递以更新 DB2。 请帮我解决这个问题。我尝试这样做,但 LINQ 允许等值连接,但我无法让它为 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

提前致谢

【问题讨论】:

标签: asp.net linq linq-to-objects


【解决方案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

【讨论】:

  • 感谢您的回复。我以前试过这个,但它不起作用。我将为此任务发布 TSQL: select * from DB1 left join DB2 on DB1.client_ID = DB2.client_ID 和 DB1.Engagement_ID = DB2.Engagement_ID 其中 DB2.CLient_ID 为空,DB2.Engagement_ID 为空,DB1.client_id 在(从 DB2 中选择 client_id)我正在尝试将此 T SQL 转换为 LINQ
  • 这会给出错误的结果。例如,如果 e1 具有密钥 cid1 和 eid1 而 e2 具有密钥 cid2 和 eid2 这将返回一个结果,而事实上@nithin 正在寻找 cid1 存在于 e2 但不存在对 cid1 和 eid1 的情况。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多