У меня есть SQL-запрос, похожий на Lambda Expressions, как правило, с большим количеством объединений, чем в этом примере.Множественное левое внешнее соединение с лямбда-выражениями
select Table2.a,
Table2.b,
Table2.c,
Table2.d
from Table1
LEFT OUTER JOIN Table2
ON Table2.a = Table1.a and
Table2.b = Table1.b and
Table2.c = Table1.c
LEFT OUTER JOIN Table3
ON Table3.b = Table1.b AND
Table3.c = Table1.c AND
Table3.d = Table1.d
where (Table1.a = ValueA)
order by Table3.f
Я делаю это с Join() лямбда-выражение, но я вижу в профилировщике SQL Server, что генерировать INNER JOIN и я нужен LEFT OUTER JOIN.
Это, как я делаю это с помощью функции присоединения()
var RS = DBContext.Table1.Join(DBContext.Table2,
Table1 => new {Table1.a, Table1.b, Table1.c},
Table2 => new {Table1.a, Table1.b, Table1.c},
(Table1, Table2) => new {Table1})
.Join(DBContext.Table3,
LastJoin => new {LastJoin.Table1.b, LastJoin.Table1.c, LastJoin.Table1.d},
Table3 => new {Table3.b, Table3.c, Table3.d},
(LastJoin,Table3) => new {LastJoin.Table1, Table3})
.Where (LastTable => LastTable.Table1.a == ValueA)
.OrderBy(LastTable => LastTable.Table3.f)
.Select (LastTable => new {LastTable.Table1, LastTable.Table3});
Я читал, что это может быть сделано с DefaultIfEmpty() или GroupJoin(), но я не найти какой-либо сложный пример с более одного ВЛЕВОГО ВЗАИМОДЕЙСТВИЯ.
Можете ли вы показать, какие свойства навигации у вас есть? Это намного проще, если вы можете использовать синтаксис типа 'orderby table1.Table3.f'. –
Здравствуйте, мое выражение lambda dos не указывает его, потому что я хочу, чтобы все поля сущностей были причиной выбора в конце выражения лямбда. – JuanDYB
Так как вы знаете, как написать запрос с левым соединением, почему бы прямо не вызвать его или не поместить в хранимый процесс и назвать его? – HLGEM