2010-09-16 13 views
24

Avevo provato ad unire due tabelle in modo condizionale ma mi dà errore di sintassi. Ho provato a trovare la soluzione in rete ma non riesco a trovare come fare un join condizionale con condizioni. L'unica altra alternativa è ottenere il valore prima da una tabella e creare nuovamente una query.Greater than Condition in Linq Join

Voglio solo confermare se c'è un altro modo di fare un join condizionale con linq.

Ecco il mio codice, sto cercando di trovare tutte le posizioni uguali o inferiori a me. Fondamentalmente voglio ottenere i miei colleghi e subordinati.

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

risposta

36

Non si può fare che con un LINQ unisce - LINQ supporta solo equijoins. Tuttavia, si può fare questo:

var query = from e in entity.M_Employee 
      from p in entity.M_Position 
      where e.PostionId >= p.PositionId 
      select p; 

O un approccio un po 'alternativa, ma equivalente:

var query = entity.M_Employee 
        .SelectMany(e => entity.M_Position 
             .Where(p => e.PostionId >= p.PositionId)); 
+0

oh. quindi il cross join può funzionare ... Grazie – Nap

2

seguire:

from e in entity.M_Employee 
from p in entity.M_Position.Where(p => e.PostionId >= p.PositionId) 
select p; 

produrrà esattamente lo stesso SQL siete dopo (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); 

Se si dispone di una tabella di modifiche ai dettagli storici incluso lo stato di autorizzazione e la data di validità. La prima query individua i dettagli correnti di ogni cliente e la seconda query aggiunge tutte le successive modifiche di dettaglio non autorizzate nella tabella.

Spero che questo sia utile in quanto mi ci è voluto un po 'di tempo e ho aiutato anche a farlo.