VB.NET LINQ присоединиться - PullRequest
2 голосов
/ 06 июля 2010

У меня есть эта сложная задача в VB.NET LINQ.У меня есть 2 базы данных с разных серверов.Я не могу связать базы данных.Данные извлекаются из баз данных как:

  • DB1

  • Client_ID Engagement_ID Включено Описание

  • 600 10 True Company1
  • 600 20 False Company2
  • 700 10 True Company3
  • DB2
  • Client_ID Engagement_ID включено Описание
  • 600 5 True Company1
  • 600 10 False Company2
  • 500 30 True Company3

Во внешнем интерфейсе мне нужно добавить Engagements клиентов, которые присутствуют в DB1 и отсутствуют в DB2.Я делаю вызов API и добавляю задания, так как не могу обновить базу данных.В этом примере мне нужно добавить вторую запись DB1 в DB2, поскольку идентификатор клиента 600 существует в DB2, а идентификатор взаимодействия 20 для идентификатора клиента 600 не существует в DB2.Я не могу добавить третью запись DB1 в DB2, поскольку ID клиента 700 не существует в DB2.Мне нужен запрос LINQ для возврата записей, где DB1.client_id = DB2.Client_ID и DB1.Engagement_ID <> DB2.Engagement_ID.Если запрос LINQ возвращает записи в виде данных или в какой-либо структуре данных, я могу циклически просмотреть записи и сделать вызовы API, а также передать идентификатор клиента, идентификатор взаимодействия, Включено и описание в качестве параметров для обновления 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

Заранее спасибо

1 Ответ

1 голос
/ 06 июля 2010

Второй критерий соединения можно добавить в виде предложения 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
...