INNER JOIN

Enlaces anteriores:

Como siempre es necesario el DataContext (que creamos en el primer articulo).

 

DataClasses1DataContext db = new DataClasses1DataContext();

Ejemplo 1:

Las operaciones de join son mas complejas con expresiones lambda, es ahora cuando se pone de manifiesto las ventajas de la sinrtaxis "azucarada" de Linq.

 

SELECT

[t0].[PersonaContacto],

[t1].[FechaAprobacion],

[t0].[CodigoSolicitud]

FROM

[dbo].[ALLUsuarioSolicitud] AS [t0]

INNER JOIN [dbo].[ALLAdminUsuarioSolicitud] AS [t1]

ON [t0].[CodigoSolicitud] = [t1].[CodigoSolicitud]

WHERE

[t0].[CodigoSolicitud] = @p0

 

var resultado = db.ALLUsuarioSolicituds.Join(

db.ALLAdminUsuarioSolicituds,

f => f.CodigoSolicitud,

(ALLAdminUsuarioSolicitud g) => g.CodigoSolicitud,

(f, g) => new

{

PersonaContacto = f.PersonaContacto,

FechaAprobacion = g.FechaAprobacion,

CodigoSolicitud = f.CodigoSolicitud

}

).Where(f => f.CodigoSolicitud == miCodigo);

La línea , CodigoSolicitud = f.CodigoSolicitud es importatante ya que SINO no puedo utilizarlo en el WHERE.

 

var res = from u in db.ALLUsuarioSolicituds

join a in db.ALLAdminUsuarioSolicituds

on u.CodigoSolicitud equals a.CodigoSolicitud

where u.CodigoSolicitud == miCodigo

select new {

PersonaContacto = u.PersonaContacto,

FechaAprobacion = a.FechaAprobacion,

CodigoSolicitud = u.CodigoSolicitud };

Notese el echo de que se utiliza el operador equals en la join. Este operador especial, esta motivado porque no todos los operadores de C# son admitidos en una expresion de combinación.

Ejemplo 2:

 

SELECT

[t1].[FechaAprobacion],

[t0].[PersonaContacto]

FROM

[dbo].[ALLUsuarioSolicitud] AS [t0]

INNER JOIN [dbo].[ALLAdminUsuarioSolicitud] AS [t1]

ON [t0].[CodigoSolicitud] = [t1].[CodigoSolicitud]

WHERE

[t0].[CodigoSolicitud] = @p0

 

var resultado = db.ALLUsuarioSolicituds.Join(

db.ALLAdminUsuarioSolicituds,

f => f.CodigoSolicitud,

(ALLAdminUsuarioSolicitud g) => g.CodigoSolicitud,

(f, g) => new

{

PersonaContacto = f.PersonaContacto,

FechaAprobacion = g.FechaAprobacion,

CodigoSolicitud = f.CodigoSolicitud

}

).Where(f => f.CodigoSolicitud == CodigoSolicitud

).Select(f => new

{

FechaAprobacion = f.FechaAprobacion,

PersonaContacto = f.PersonaContacto

});

 

var res = from u in db.ALLUsuarioSolicituds

join a in db.ALLAdminUsuarioSolicituds

on u.CodigoSolicitud equals a.CodigoSolicitud

where u.CodigoSolicitud == miCodigo

select new {

PersonaContacto = u.PersonaContacto,

FechaAprobacion = a.FechaAprobacion,

};

Ejemplo 3:

 

SELECT

[t0].[Usuario],

[t0].[Clave]

FROM

[dbo].[ALLUsuarioSolicitud] AS [t0]

INNER JOIN [dbo].[ALLAdminUsuarioSolicitud] AS [t1]

ON ([t0].[CodigoSolicitud] = [t1].[CodigoSolicitud])

AND ([t0].[Usuario] = [t1].[Historial]) /* <----- CAMBIO*/

WHERE

[t0].[CodigoSolicitud] = @p0

 

var resultado = db.ALLAdminUsuarioSolicituds.Join(

db.ALLAdminUsuarioSolicituds,

f => new{

CodigoSolicitud = f.CodigoSolicitud,

Usuario = f.Usuario},

(ALLAdminUsuarioSolicitud g) => new{

CodigoSolicitud = g.CodigoSolicitud,

Usuario = g.Historial},

(f, g) => new{

PersonaContacto = f.PersonaContacto,

FechaAprobacion = g.FechaAprobacion,

CodigoSolicitud = f.CodigoSolicitud}

).Where(f => f.CodigoSolicitud == CodigoSolicitud

).Select(f => new{

FechaAprobacion = f.FechaAprobacion,

PersonaContacto = f.PersonaContacto});

 

/*

IMPORTANTE TANTO EL ORDEN COMO EL NOMBRE DEL CAMPO y EL TIPO DE DATO

DEBE SER IGUAL

*/

 

var res = from u in db.ALLUsuarioSolicituds

join a in db.ALLAdminUsuarioSolicituds

on new { CodigoSolicitud = u.CodigoSolicitud,

Usuario = u.Usuario }

equals

new { CodigoSolicitud = a.CodigoSolicitud,

Usuario = a.Historial }

where u.CodigoSolicitud == miCodigo

select new

{

PersonaContacto = u.PersonaContacto,

FechaAprobacion = a.FechaAprobacion,

CodigoSolicitud = u.CodigoSolicitud

};

  

Ejemplo 4:

 

SELECT

[t1].[FechaAprobacion],

[t0].[PersonaContacto]

FROM

[dbo].[ALLUsuarioSolicitud] AS [t0]

INNER JOIN [dbo].[ALLAdminUsuarioSolicitud] AS [t1]

ON ([t0].[CodigoSolicitud] = [t1].[CodigoSolicitud])

AND ([t0].[Usuario] = [t1].[Historial])

AND (@p0 = [t1].[EstadoId])/* <------------CAMBIO */

WHERE

[t0].[CodigoSolicitud] = @p1

 

int miEstado = 1;

 

var resultado = db.ALLUsuarioSolicituds.Join(

db.ALLAdminUsuarioSolicituds,

f => new{

CodigoSolicitud = f.CodigoSolicitud,

Usuario = f.Usuario,

EstadoId = miEstado },

(ALLAdminUsuarioSolicitud g) => new{

CodigoSolicitud = g.CodigoSolicitud,

Usuario = g.Historial,

EstadoId = g.EstadoId},

(f, g) => new{

PersonaContacto = f.PersonaContacto,

FechaAprobacion = g.FechaAprobacion,

CodigoSolicitud = f.CodigoSolicitud}

).Where(f => f.CodigoSolicitud == CodigoSolicitud

).Select(f => new{

FechaAprobacion = f.FechaAprobacion,

PersonaContacto = f.PersonaContacto});

 

int miEstado = 1;

 

var res = from u in db.ALLUsuarioSolicituds

join a in db.ALLAdminUsuarioSolicituds

on new { CodigoSolicitud = u.CodigoSolicitud,

Usuario = u.Usuario,

Estado = miEstado}

equals

new { CodigoSolicitud = a.CodigoSolicitud,

Usuario = a.Historial,

Estado = a.EstadoId}

where u.CodigoSolicitud == miCodigo

select new

{

PersonaContacto = u.PersonaContacto,

FechaAprobacion = a.FechaAprobacion,

CodigoSolicitud = u.CodigoSolicitud};

Ejemplo 5:

 

SELECT

[t0].[PaisId] AS [Pais],

[t1].[ProvinciaId],

(

SELECT

COUNT(*)

FROM

[dbo].[ALLProvincia] AS [t2]

WHERE

[t0].[PaisId] = [t2].[PaisId]

) AS [value]

FROM

[dbo].[ALLPais] AS [t0]

LEFT OUTER JOIN [dbo].[ALLProvincia] AS [t1] /*<-CAMBIO*/

ON [t0].[PaisId] = [t1].[PaisId]

ORDER BY

[t0].[PaisId],

[t1].[ProvinciaId]

 

var resultado = db.ALLPais.GroupJoin(

db.ALLProvincias,

f => f.PaisId,

(ALLProvincia g) => g.PaisId,

(f, g) => new

{

Pais = f.PaisId,

Provincia = g.Select(y => y.ProvinciaId)});

Ejemplo 6:

 

SELECT

[t0].[FechaAprobacion],

[t1].[PersonaContacto],

[t2].[Descripcion] AS [DescripcionEstado]

FROM

[dbo].[ALLAdminUsuarioSolicitud] AS [t0]

INNER JOIN [dbo].[ALLUsuarioSolicitud] AS [t1]

ON [t0].[CodigoSolicitud] = [t1].[CodigoSolicitud]

INNER JOIN [dbo].[ALLEstado] AS [t2] /*<-----CAMBIO*/

ON [t0].[EstadoId] = [t2].[EstadoId]

WHERE

[t1].[CodigoSolicitud] = @p0

 

var resultado = db.ALLAdminUsuarioSolicituds.Join(

db.ALLUsuarioSolicituds,

f => f.CodigoSolicitud,

(ALLUsuarioSolicitud g) => g.CodigoSolicitud,

(f, g) => new{

PersonaContacto = g.PersonaContacto,

FechaAprobacion = f.FechaAprobacion,

EstadoId = f.EstadoId,

CodigoSolicitud = g.CodigoSolicitud}

).Join(

receptivo.ALLEstados,

h => h.EstadoId,

(ALLEstado i) => i.EstadoId,

(h, i) => new{

h.CodigoSolicitud,

h.FechaAprobacion,

h.PersonaContacto,

DescripcionEstado = i.Descripcion}

).Where(g => g.CodigoSolicitud == CodigoSolicitud

).Select(f => new{

FechaAprobacion = f.FechaAprobacion,

PersonaContacto = f.PersonaContacto,

f.DescripcionEstado});

Ejemplo 7:

 

SELECT

[t0].[FechaAprobacion],

[t1].[PersonaContacto]

FROM

[dbo].[ALLAdminUsuarioSolicitud] AS [t0]

INNER JOIN ([dbo].[ALLUsuarioSolicitud] AS [t1]

INNER JOIN [dbo].[ALLIdioma] AS [t2]

ON [t1].[IdiomaId] = ([t2].[IdiomaId])

) ON [t0].[CodigoSolicitud] = [t1].[CodigoSolicitud]

WHERE

([t1].[CodigoSolicitud] = @p0)

AND ([t1].[Direccion] = @p1)

 

var resultado = db.ALLAdminUsuarioSolicituds.Join(

db.ALLUsuarioSolicituds.Join(

db.ALLIdiomas,

d => d.IdiomaId,

y => y.IdiomaId,

(d, y) => new{

DescripcionIdioma = y.Descripcion,

PersonaContacto = d.PersonaContacto,

Direccion = d.Direccion,

CodigoSolicitud = d.CodigoSolicitud}

).Where(t => t.Direccion == "Castellana"

).Select(t => new

{

CodigoSolicitud = t.CodigoSolicitud,

PersonaContacto = t.PersonaContacto

}),

f => f.CodigoSolicitud,

g => g.CodigoSolicitud,

(f, g) => new{

PersonaContacto = g.PersonaContacto,

FechaAprobacion = f.FechaAprobacion,

EstadoId = f.EstadoId,

CodigoSolicitud = g.CodigoSolicitud}

).Where(g => g.CodigoSolicitud == CodigoSolicitud

).Select(f => new{

FechaAprobacion = f.FechaAprobacion,

PersonaContacto = f.PersonaContacto});

Ejemplo 8:

 

En este caso vamos a hacer un outer join.

 

SELECT [t0].[CodigoSolicitud],

[t0].[NombreEmpresa],

[t0].[Direccion],

[t0].[CiudadId],

[t0].[ProvinciaId],

[t0].[PaisId],

[t0].[CodigoPostal],

[t0].[Telefono],

[t0].[Fax],

[t0].[Email],

[t0].[Web],

[t0].[PersonaContacto],

[t0].[IdiomaId],

[t0].[Cargo],

[t0].[Usuario],

[t0].[Clave]

FROM [dbo].[ALLUsuarioSolicitud] AS [t0]

LEFT OUTER JOIN [dbo].[ALLAdminUsuarioSolicitud] AS [t1]

ON [t0].[CodigoSolicitud] = [t1].[CodigoSolicitud]

 

var res = from u in db.ALLUsuarioSolicituds

join a in db.ALLAdminUsuarioSolicituds

on u.CodigoSolicitud equals a.CodigoSolicitud

into tmp

from t in tmp.DefaultIfEmpty()

select u;

  

 

Métodos Extensores: INNER JOIN
David Del Pino Corredor

David es un Analista/Programador que trabaja en una consultoria. En su experiencia laboral ha tratado con varias tecnologías especialmente con SQL Server 2005 y .NET.
Fecha de alta:13/04/2008
Última actualizacion:13/04/2008
Visitas totales:22532
Valorar el contenido:
Últimas consultas realizadas en los foros
Últimas preguntas sin contestar en los foros de devjoker.com
21/05/2009
2
200
SQL
21/06/2006
4
21442
C#
02/02/2010
0
21