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 ...
TransactionScope - Simplificando el trabajo con transacciones.
LinQ To SQL - Un ejemplo sencillo
Cómo activar Intelisense (autocompletado) en el Web.config
Leer un campo XML de SQL Server 2005 con C#
TripleDES - Un ejemplo practico en C#
Mostrar un GridView dentro de un DataList
String.Format
LINQ con métodos Extensores y expresiones lambda
Métodos Extensores: SELECT
Problemas en la instalación de Visual Studio 2008-Visual studio web authoring component

Afiliados
La Web del programador
MundoProgramacion


 

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


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: 1297 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.




18/08/2008 SQL Server 2008
Visitas: 39 | Comentarios: 0 | Archivo: Articulos
Categorias: Transact-SQL
Visitas: 131 | Comentarios: 0 | Archivo: Articulos
Categorias: C#|ADO.NET|LinQ
Visitas: 161 | Comentarios: 1 | Archivo: Articulos
Categorias: Humor
Visitas: 154 | Comentarios: 0 | Archivo: Articulos
Categorias: WCF
Visitas: 123 | Comentarios: 0 | Archivo: Articulos
Categorias: WCF
Visitas: 210 | Comentarios: 0 | Archivo: Articulos
Categorias: ASP.NET
Visitas: 278 | Comentarios: 5 | Archivo: Articulos
Categorias: ASP.NET
Visitas: 4990 | Comentarios: 4 | Archivo: Articulos
Categorias: C#|Transact-SQL|LinQ
Visitas: 603 | Comentarios: 1 | Archivo: Articulos
Categorias: Visual Studio
Visitas: 1402 | Comentarios: 1 | Archivo: Articulos
Categorias: Transact-SQL

Útimos temas recibidos en los foros ...
MAQUINAS VIRTUALES por victor ... [WIN 98/NT/2000/XP] 0 19/08/2008
Y lo mismo en WEB por systemat ... [C#] 1 18/08/2008
Manual del minicom de Linux con fotos. por Meta ... [UNIX] 4 17/08/2008
PROGRAMACION por JUANMA ... [Visual Basic .NET] 1 19/08/2008
Conectar ASP con B.D Informix por Franco ... [ASP] 9 02/05/2007
Codigo salir por Jazmin ... [ASP.NET] 1 18/08/2008
EXPORTAR DATOS A ARCHIVOS PLANOS. por WIX ... [ORACLE] 10 06/08/2007
formulario por artdark ... [C#] 2 04/08/2008
Codigo salir por Jazmin ... [ASP.NET] 0 18/08/2008
cambiar de modo un gried view por ivan ... [ASP.NET] 0 18/08/2008
ayuda urgente porfavor por vicancer ... [ASP.NET] 0 18/08/2008
pollo por hajaj ... [Actualidad] 1 15/08/2008

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 ...
24/07/2006 SQL Dinamico    forma parte de...Tutorial PL/SQL
09/10/2006 Cadenas de texto    forma parte de...Tutorial C#
22/10/2005 Tablas    forma parte de...Tutorial SQL
09/08/2007 Como mostrar el formato de fecha corta en un gridView
02/09/2007 Procedimientos almacenados en Transact SQL    forma parte de...Tutorial de Transact SQL
25/08/2007 Variables en Transact SQL    forma parte de...Tutorial de Transact SQL
03/10/2006 Introduccion a C#    forma parte de...Tutorial C#
21/02/2007 BULK COLLECT    forma parte de...Tutorial PL/SQL
28/08/2006 Ubuntu en VmWare con VMware Tools
11/06/2008 Problemas con el diseñador Web de Visual Studio 2008

 

Encuesta
Si trabajas con .NET ¿Que entorno utilizas?
[Ver] [Votar]