2010-11-17 2 views
3

Im пытается отобразить строки, которые не существуют из другой таблицы, используя LINQ. Может кто-нибудь мне помочь?LINQ Left Join On Not Equal Rows

Здесь используется sql im.

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, не можем ли мы использовать левое соединение linq напрямую с предложением where?

ответ

9

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

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.

+0

А ... это, скорее всего, то, что я хочу использовать .. много спасибо jon .. – seigfred