Так что у меня небольшая проблема с linq. Я хочу, чтобы соединение было OUTER JOIN или 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.DefaultIfEmpty()
select tblA);
ВНУТРЕННЕЕ СОЕДИНЕНИЕ:
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);
Я хочу объединить это в одном запросе и, проверив какое-либо условие, выполнить OUTER JOIN или INNER JOIN, что-то вроде этого:
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: доступ к элементу 'System.String ValueB' из 'tblB' недопустим для типа 'System.Collections.Generic.IEnumerable'1 [tblB]"
Я что-то здесь упускаю?
UPDATE
То, что я хочу, - это внешнее соединение, но linq не произвел запрос, на который я надеялся, когда условия установлены для tlbB. Включение SQL Profiler дает этот запрос:
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, которая устанавливает условие для таблицы в соединении.