мне нужно написать следующий T-SQL в LINQ:LEFT JOIN с ИЛИ условие LINQ
SELECT T1.ID, T2.Name
FROM T1
LEFT JOIN T2 ON (T1.ID = I2.ID1 OR T1.ID = T2.ID2)
ОШ присоединиться бы выглядеть в LINQ:
T1.Join(T2, t1=>new{}, t2=>new{}, (t1,t2)=>new{ID=t1.Id, t2=t2}).Where(o=>o.Id == o.t2.Id1 || o.Id==o.t2.Id2);
Но запрос INNER JOIN, а не LEFT JOIN. Какой-LEFT JOIN будет выглядеть следующим образом:
T1.GroupJoin(T2, t1 => t1.Id, t2 => t2.Id1, (t1, t2) => new { Id = t1.Id, Name1 = t2.Select(t => t.Name) }).DefaultIfEmpty()
.GroupJoin(T2, o => o.Id, t2 => t2.Id2, (i, j) => new { Id = i.Id, Name1 = i.Name1, Name2 = j.Select(t => t.Name) }).DefaultIfEmpty();
Этот запрос выдает правильные результаты, но делает 2 присоединяется вместо 1. Или это действительно эквивалентно оригинальной T-SQL?
Кто-нибудь знает, как лучше переписать этот запрос?
Почему у вас есть два GroupJoins? –