2010-09-16 14 views
24

He intentado unir dos tablas condicionalmente pero me está dando un error de sintaxis. Traté de encontrar una solución en la red, pero no puedo encontrar cómo hacer una combinación condicional con la condición. La única alternativa es obtener primero el valor de una tabla y hacer una consulta nuevamente.Greater Than Condition in Linq Join

Solo quiero confirmar si hay alguna otra forma de hacer la unión condicional con linq.

Aquí está mi código, estoy tratando de encontrar todas las posiciones iguales o inferiores a mí. Básicamente quiero obtener mis compañeros y subordinados.

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

Respuesta

36

Usted no puede hacer eso con un LINQ une - LINQ sólo admite equijoins. Sin embargo, usted puede hacer esto:

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

O un enfoque ligeramente alternativas pero equivalentes:

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

oh. para que la unión cruzada pueda funcionar ... Gracias – Nap

2

Siguiendo:

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

producirá exactamente el mismo SQL que está después (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); 

Si tiene una tabla de cambios de detalles históricos, incluido el estado de la autorización y la fecha de vigencia. La primera consulta encuentra los detalles actuales de cada cliente y la segunda consulta agrega todos los cambios posteriores no autorizados en la tabla.

Espero que esto sea útil, ya que me tomó algo de tiempo y me ayudó a conseguirlo también.