我需要做的左连接在哪里的条件是多个条件OR
做得相当不是AND
秒。 我发现很多后者的样本,但我努力让我的情况下正确的答案。
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”的计数领域的投影。 我修改上面的例子,试图说明我后。 当我使用的方法与上面运行乔恩斯基特注意到我从,而不是在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() }
我得到的从返回的记录计数 - 在b中没有匹配的记录数。
编辑:
我给的答案乔恩-我已经解决了我的问题,计数-我没有意识到我可以用一个LAMDA过滤计数(g.Count(x => x != null))
另外,我需要B组由而不是由正如我上面了。 这给出正确的结果,但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