2010-09-16 2 views
24

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

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

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

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

ответ

36

Вы не можете сделать это с 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)); 
+0

oh. поэтому перекрестное соединение может работать ... Спасибо – Nap

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).

0
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); 

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

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

Смежные вопросы