所以我对linq有点问题。我想加盟是一个OUTER JOIN或INNER JOIN,取决于是否值将被过滤在桌子上LINQ中的条件加入
OUTER JOIN:
var query = (from tblA in dc.tblA
join tblB in GetMyTable() on tblA.Ref equals tblB.RefA into joinedTblB
from tblB in joinedTblB.DefaultIfEmpty()
select tblA);
INNER JOIN:
var query = (from tblA in dc.tblA
join tblB in GetMyTable() on tblA.Ref equals tblB.RefA into joinedTblB
from tblB in joinedTblB
select tblA);
什么我想要结合这在相同的查询,并通过检查一些条件做一个外部联接或内部联接,如下所示:
var query = (from tblA in dc.tblA
join tblB in GetMyTable() on tblA.Ref equals tblB.RefA into joinedTblB
from tblNEWB in ((checkCondition==false) ? joinedTblB.DefaultIfEmpty() : joinedTblB)
select new {
tblA.ValueA,
tblNEWB.ValueB
});
我希望这会工作,但我得到一个错误,说:“InvalidOperationException:'tblB'的成员访问'System.String ValueB'不合法的类型'System.Collections.Generic.IEnumerable'1 [tblB]”
我在这里错过了什么吗?
UPDATE:
我要的是一个外连接,但LINQ没有产生我希望,在条件上设置天龙八部查询。打开SQL事件探查器给出了这样的查询:
LEFT OUTER JOIN tblB ON tblA.Ref = tblB.REfA AND tlbB.Key = '100'
虽然正确的查询应该是:
LEFT OUTER JOIN tblB ON tblA.Ref = tblB.RefA
WHERE tblB.Key = '100'
这样做的原因是我GetMyTable功能,设置条件表中加入。
我不明白你想要做什么,但知道这一点:tblB超出范围后进入声明。然后,您将为具有相同名称的joinedTblB引入另一个范围变量。 –
为什么不做两个单独的查询并将它们结合在一起? – R0MANARMY
当您使用关键字时,它也不是内连接。解释清楚你想做什么,我们可以提供帮助。 –