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;
|