Подтвердить что ты не робот

Больше, чем в Linq Join

Я попытался присоединиться к двум таблицам условно, но это дает мне синтаксическую ошибку. Я пытался найти решение в сети, но я не могу найти, как сделать условное соединение с условием. Единственная альтернатива - сначала получить значение из одной таблицы и снова сделать запрос.

Я просто хочу подтвердить, есть ли другой способ сделать условное соединение с linq.

Вот мой код, я пытаюсь найти всю позицию, которая равна или ниже меня. В основном я хочу получить своих сверстников и подчиненных.

from e in entity.M_Employee
join p in entity.M_Position on e.PostionId >= p.PositionId
select p;
4b9b3361

Ответ 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);

Если у вас есть таблица исторических подробных изменений, включая статус авторизации и дату вступления в силу. Первый запрос находит каждую текущую информацию каждого клиента, а второй запрос добавляет все последующие несанкционированные изменения деталей в таблице.

Надеюсь, что это будет полезно, поскольку мне понадобилось время и помощь.