Como o método "Where" do LINQ funciona?

Exatamente como o método "where" do LINQ é definido? Eu estou supondo que a implementação é algo como isto:

public static IEnumerable<T> Where ( this partialParent, Func<bla,bla> myDelegate ) 

Agora, se eu invocar o método Where assim:

from c in context.Con
where ( c.Col1 == c.Col2 )
select c

estou a adivinhar"c.Col1 == c.Col2"&nbsp;é transmitido e algunsforeach&nbsp;loop faz a verificação. Mas o que está acontecendo quando invoco onde é assim:

where ( c.Col1 == c.Col2 || c.Col3 == c.Col4 )

Os dois "cheques" são transmitidos como uma expressão inteira? Talvez esteja perdendo algo muito simples.