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

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

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

Чтобы дать немного больше информации, цель запроса - получить проекцию, содержащую все поля из «а» плюс количество подходящих записей в 'b', Я'Вы изменили приведенный выше пример, чтобы попытаться проиллюстрировать, что ям после. Когда я бегу с вышеизложенным, используя подход, Джон Скит заметил, чтоm получает количество всех записей из 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() }

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

Изменить: Я

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

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)

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