InicioArticulos y noticiasBases de datosProgramaciónForosInternetServiciosContratacionEmail
Linq y Métodos extensores
LINQ con métodos Extensores y expresiones lambda
Métodos Extensores: SELECT
Métodos Extensores: INNER JOIN
También puedes ver ...
SubVersion y Visual Studio
Encriptación con AES Rijndael - Ejemplo
TripleDES - Un ejemplo practico en C#
Insertar una marca de agua en documentos PDF
Serialización: XmlSerializer y BinaryFormater
Handler para manipular imagenes
Conversiones de tipos personalizadas (VB y C#)
Compresión por gzip y deflate
La página Web que está abriendo contiene tanto elementos seguros como no seguros.
SQL to LINQ


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;

  

 


Inicio | Linq y Métodos extensores Métodos Extensores: SELECTLinq y Métodos extensores Versión para imprimir Foros de consulta

 
No me lo puedo creer !! por almontesinos
Respuesta recibida el [22/05/2008 09:39:43]
Está muy bien el artículo, señor Del Pino. Estaba intentando enterarme de que va todo esto del linq y patatín patatán, y mira a dónde he ido a parar. Pero me parece muy mal que te hayas fusilado la introducción del technet, bribón.

 
NO CHINGUES por JIL
Respuesta recibida el [15/10/2009 09:19:55]
COMO NON IDIOTAS NO ES QUE SE FUSILEN ARTICULOS, LO IMPORTANTE ES QUE LOS COMPARTAN IDIOTA

 
Almontesinos (Autor del coment... por Devjoker
Respuesta recibida el [17/10/2009 07:24:29]
Almontesinos (Autor del comentario) y David eran compañeros de trabajos y excelentes amigos. A David nunca le gusto la teoria y por eso "copio" la introduccion teorica de MSDN. Como puede apreciarse en este y otros articualos, priman los ejemplos - la teoria quien mejor la explica es Microsoft.

 
Saben sobre el operador like por Gregor
Respuesta recibida el [26/10/2009 06:13:35]
Que tal, saben si se puede utilizar el operador Like en las consultas de link


Añadir comentario ... Para preguntar utiliza los foros
Autor:

Título:


Para preguntar utiliza los foros.



Inicio | Linq y Métodos extensores Métodos Extensores: SELECTLinq y Métodos extensores Versión para imprimir

Métodos Extensores: INNER JOIN
Autor: David Del Pino Corredor
Visitas: 7357 Fecha de publicación: 13/04/2008
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.




Visitas: 110 | Comentarios: 3 | Archivo: Articulos
02/02/2010 iPad vs Telesketch
Visitas: 809 | Comentarios: 2 | Archivo: Articulos
Categorias: Humor
Visitas: 765 | Comentarios: 3 | Archivo: Articulos
Visitas: 3177 | Comentarios: 2 | Archivo: Articulos
Categorias: C#
Visitas: 14564 | Comentarios: 7 | Archivo: Articulos
Categorias: C#|Seguridad
Visitas: 1499 | Comentarios: 3 | Archivo: Articulos
Visitas: 695 | Comentarios: 2 | Archivo: Articulos
Visitas: 369 | Comentarios: 0 | Archivo: Articulos
Visitas: 2034 | Comentarios: 2 | Archivo: Articulos
Categorias: C#

Útimos temas recibidos en los foros ...
peticion urgente mi nombre es juan pablo osorio cardona cc 71115218 por juancho ... [Actualidad] 0 14/03/2010
peticion por juancho ... [Actualidad] 0 14/03/2010
estrato de pencion por carlos antonio mateus gomez ... [Actualidad] 0 14/03/2010
quiero aprender c# por alcapego ... [C#] 4 16/02/2008
certificado pensiones horizonte por angela patricia rodriguez ... [Actualidad] 140 26/01/2010
certificado de penciones y cesantias por fredy ... [Actualidad] 2 29/01/2010
certificado por jhon jairo vargas ... [Actualidad] 1 13/03/2010
devolver consulta en form builder de oracle con like por cesar10lb ... [ORACLE] 0 13/03/2010
certificado de cesantias horizonte por yeimmy ... [Actualidad] 4 13/03/2010
solicito certificado de pensiones y sesantias para laborar por maria eugenia garcia m. ... [Actualidad] 0 13/03/2010
certificado de fondos de pensiones horizonte por mona ... [Actualidad] 6 03/03/2010
certificado pensiones por nelly moreno ... [Actualidad] 0 13/03/2010

Access CGI JSP ORACLE UNIX
Actualidad HTML/DHTML/XHTML LINUX PHP Visual Basic .NET
ASP ISAPI MS DOS Power Builder Visual Basic 6.0
ASP.NET Java mySQL SQL WIN 98/NT/2000/XP
C# JavaScript Opinion SQL Server

devjoker  Te recomendamos además ...
22/10/2005 Consultar datos. SELECT    forma parte de...Tutorial SQL
19/08/2006 Virtualización. Maquinas Virtuales.
04/03/2006 Bloques PL/SQL    forma parte de...Tutorial PL/SQL
22/03/2008 Problemas al conectar a redes wifi con Windows Vista
13/10/2006 Destructores    forma parte de...Tutorial C#
13/11/2006 Excepciones    forma parte de...Tutorial C#
01/04/2006 Estructuras de control en PL/SQL    forma parte de...Tutorial PL/SQL
12/06/2007 Estructuras de control en Transact SQL    forma parte de...Tutorial de Transact SQL
26/08/2007 Transacciones en Transact SQL    forma parte de...Tutorial de Transact SQL
19/10/2005 Una clase sencilla para encriptar cadenas de texto.

 

Encuesta
¿A que perfil te adaptas mejor?




[Ver] [Votar]