LINQ Left Join On Не Равные Ряды - PullRequest
3 голосов
/ 17 ноября 2010

Я пытаюсь отобразить строки, которых нет в другой таблице, используя LINQ. кто-нибудь может мне помочь?

Вот sql, который я использую.

select * from table1 
left join table2
on 
table1.col1 = table2.col1 
and 
table1.col2 = table2.col2
where
table2.col1 is null and table2.col2 is null

Уже искал и нашел какое-то решение. Вот что я сделал до сих пор.

from t1 in table1
where 
!(from t2 in table1
  join t3 in table2 on
  new { t2.col1, t2.col2 } 
  equals 
  new { t3.col1, t3.col2 }
  select t2.PK).Contains(t1.PK)
  select t1

Приведенный выше код работает хорошо, но мне просто интересно, это единственное решение, которое я могу использовать? Я имею в виду, вместо того, чтобы использовать метод JOIN и CONTAINS, мы не можем использовать left join linq напрямую с предложением where?

1 Ответ

9 голосов
/ 17 ноября 2010

Ну, вы можете сделать что-то вроде этого:

var query = from t1 in table1
            join t2 in table2
            on new { t1.col1, t2.col2} equals { t2.col1, t2.col2 }
            into groups
            where !groups.Any()
            select t1;

Здесь groups - это набор строк в t2, которые соответствуют «текущему» t1 - он будет пустым, еслинет никаких групп, а это именно то, что вы хотите.Самый простой способ проверить, является ли последовательность пустой, - это использовать метод Any.

...