Больше, чем в Linq Join
Я попытался присоединиться к двум таблицам условно, но это дает мне синтаксическую ошибку. Я пытался найти решение в сети, но я не могу найти, как сделать условное соединение с условием. Единственная альтернатива - сначала получить значение из одной таблицы и снова сделать запрос.
Я просто хочу подтвердить, есть ли другой способ сделать условное соединение с linq.
Вот мой код, я пытаюсь найти всю позицию, которая равна или ниже меня. В основном я хочу получить своих сверстников и подчиненных.
from e in entity.M_Employee
join p in entity.M_Position on e.PostionId >= p.PositionId
select p;
Ответы
Ответ 1
Вы не можете сделать это с LINQ-соединениями - LINQ поддерживает только equijoins. Однако вы можете сделать это:
var query = from e in entity.M_Employee
from p in entity.M_Position
where e.PostionId >= p.PositionId
select p;
Или немного альтернативный, но эквивалентный подход:
var query = entity.M_Employee
.SelectMany(e => entity.M_Position
.Where(p => e.PostionId >= p.PositionId));
Ответ 2
После:
from e in entity.M_Employee
from p in entity.M_Position.Where(p => e.PostionId >= p.PositionId)
select p;
создаст точно тот же SQL, что и после (INNER JOIN Position P ON E..PostionId >= P.PositionId).
Ответ 3
var currentDetails = from c in customers
group c by new { c.Name, c.Authed } into g
where g.Key.Authed == "True"
select g.OrderByDescending(t => t.EffectiveDate).First();
var currentAndUnauthorised = (from c in customers
join cd in currentDetails
on c.Name equals cd.Name
where c.EffectiveDate >= cd.EffectiveDate
select c).OrderBy(o => o.CoverId).ThenBy(o => o.EffectiveDate);
Если у вас есть таблица исторических подробных изменений, включая статус авторизации и дату вступления в силу. Первый запрос находит каждую текущую информацию каждого клиента, а второй запрос добавляет все последующие несанкционированные изменения деталей в таблице.
Надеюсь, что это будет полезно, поскольку мне понадобилось время и помощь.