Linq - соединение слева при нескольких (ИЛИ) условиях

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

from a in tablea
join b in tableb on new { a.col1, a.col2 } equals new { b.col1, b.col2 }
group a by a into g
select new () { col1 = a.col1, col2 = a.col2, count = g.Count() }

отлично работает для соединений, где все условия должны совпадать. Мне нужно получить соединение, чтобы соответствоватьon a.col1 = b.col1 OR a.col2 = b.col2.

Я знаю, что это должно быть легко, но я ничего не понимаю по этому поводу!

Редактировать:

Чтобы дать немного больше информации, целью запроса является получение прогноза, содержащего все поля из «a»; плюс количество совпадающих записей в «b». Я изменил приведенный выше пример, чтобы попытаться проиллюстрировать, что я делаю после. Когда я использовал описанный выше подход, Джон Скит отметил, что я получаю счет всех записей из a, а не счет связанных записей в b.

Базовое левое соединение отлично работает:

from a in tablea
from b in tableb
.Where( b => ( a.col1 == b.col1 || a.col2 == b.col2))
.DefaultIfEmpty()
select new { col1 = a.col1, col2 = a.col2 }

Если я пересмотрю его, чтобы добавить группировку, как показано ниже

from a in tablea
from b in tableb
.Where( b => ( a.col1 == b.col1 || a.col2 == b.col2))
.DefaultIfEmpty()
group a by a.col1 into g
select new { col1 = g.Key, count = g.Count() }

Я получаю количество записей, возвращенных из a, а не количество записей в совпадении в b.

Редактировать:

Я дам ответ Джону - я решил проблему с моим счетом - я не понял, что могу использовать лямду для фильтрации счета(g.Count(x => x != null)), Плюс мне нужно сгруппировать b по a, а не по a, как я делал выше. Это дает правильный результат, но SQL не так эффективен, как я пишу его от руки, так как он добавляет коррелированный подзапрос - если кто-то может посоветовать лучший способ написания его для имитации следующего SQL, я был бы признателен!

select a.col1, count(b.col1)
from tablea a
left join tableb b
on a.col1 = b.col1
or a.col2 = b.col2
group by a.col1

Ответы на вопрос(2)

Ваш ответ на вопрос