OPERACIONES SQL EN LINQ
Antes de realizar cualquier operación en la base de datos con Linq se tiene que declarar el DataContext Generado por Linq To SQL de la siguiente manera:
nombreDataContext variable = new
nombreDataContext ();
Por ejemplo se generó una clase Linq To SQL llamado dclsTienda,
la instancia en código seria la siguiente:
dclsTiendaDataContext con = new dclsTiendaDataContext();
- SELECCIÓN
- FILTRO WHERE
- JOINS
- CARGAR A UN GRID VIEW
- INSERCIÓN
- ACTUALIZACIÓN
Las consultas select son muy similares a SQL solo que en LINQ se realiza de forma invertida como se muestra a continuación:
var clie = (from cl in con.cliente select cl);
Donde:
clie, cl: Variable cualquiera.
con.cliente: nombre del Data Contex seguido por el nombre de la tabla a seleccionar
En la parte final de la consulta select se especificó solo el alias esto a razón de que se seleccionara todos los campos de la tabla, pero también es posible seleccionar solo los campos específicos que desee, como se muestra a continuación:
var clie = (from cl in con.cliente
select new { cl.Cod_cliente, cl.Nombre_cliente, cl.Pais });
El filtro hace que la consulta devuelva sólo los elementos para los que la expresión es verdadera. El resultado se genera mediante la cláusula where como se muestra en el siguiente ejemplo:
var cliente = (from cl in con.cliente
where cl.Pais=="Peru" && cl.Ciudad=="Lima"
select cl);
Operadores comunes:
SQL |
LINQ
|
| = | == |
| AND | && |
| OR | || |
La cláusula join sirve para asociar elementos de secuencias de origen diferentes que no tienen ninguna relación directa en el modelo de objetos. El único requisito es que los elementos de cada origen compartan algún valor en común para el que se pueda comparar la igualdad.
Una cláusula join realiza una combinación de igualdad. En otras palabras, las coincidencias sólo se pueden basar en la igualdad de dos claves. No se admiten otros tipos de comparaciones, como "mayor que" o "distinto de". Para que quede claro que todas las combinaciones son combinaciones de igualdad, la cláusula join utiliza la palabra clave equals en lugar del operador ==.
var clie = (from cl in con.cliente
join cp in con.comprobante_pago
on cl.Cod_cliente equals cp.Cod_cliente
select new { cl, cp });
En la parte del comando on indica el campo en común que tienen ambas tablas.
En la parte de selección especificamos los campos a mostrar de cada una de las tablas unidas.
De la misma forma puede añadir cuantos join considere necesario.
Para realizar operaciones de unión (join) con más de una clave en comun. Esto se logra utilizando una clave compuesta. Una clave compuesta se crea como un tipo anónimo o un tipo con nombre que incluye los valores con los que se desea comparar. Los nombres de las propiedades, y el orden en el que ocurren, deben ser idénticos en cada clave.
var clie = (from p in con.pedido
join c in con.cliente
on new {codigo = p.Cod_cliente, empleado = p.Cod_empleado}
equals new { codigo = c.Cod_cliente, empleado = 1}
select new { c.Nombre_cliente, p.Monto_pedido, p.Fecha_pedido });
La forma es muy simple solo basta realizar la consulta y asignarle a la lista el valor del Data Source, como se muestra a continuación:
var clie = (from cl in con.cliente
select new { cl.Cod_cliente, cl.Nombre_cliente, cl.Pais });
GridView1.DataSource = clie.ToList();
GridView1.DataBind();
Las operaciones Insert se realiza agregando datos en el modelo de objetos. De forma predeterminada, LINQ to SQL convierte estas acciones a SQL y envía los cambios a la base de datos.
cliente cl = new cliente();
cl.Cod_cliente = 271;
cl.Nombre_cliente = "Luis Catacora";
cl.Pais = "Peru";
cl.Telefono = "952229445";
con.cliente.InsertOnSubmit(cl);
con.SubmitChanges();
Las operaciones Update se realizan cambiando los datos del modelo de objetos. De forma predeterminada, LINQ to SQL convierte estas acciones a SQL y envía los cambios a la base de datos.
var cl = (from c in con.cliente where c.Cod_cliente == 271 select c).SingleOrDefault();
cl.Nombre_cliente = "Luis Catacora Murillo";
cl.Ciudad = "Tacna";
cl.Direccion_1 = "Mi casa Nº 666";
con.SubmitChanges();
Otra forma de realizar lo mismo es la siguiente:
- ELIMINACIÓN
- LLAMADA A PROCEDIMIENTOS ALMACENADOS
- PAGINACIÓN DEL LADO DEL SERVIDOR
var cl = con.cliente.Where(w => w.Cod_cliente == 271).SingleOrDefault();
cl.Nombre_cliente = "Luis Catacora Murillo";
cl.Ciudad = "Tacna";
cl.Direccion_1 = "Mi casa Nº 666";
con.SubmitChanges();
Las operaciones Delete quitando objetos en el modelo de objetos. De forma predeterminada, LINQ to SQL convierte estas acciones a SQL y envía los cambios a la base de datos.
El siguiente código muestra como eliminar al cliente con el código 271:
var cl = (from c in con.cliente
where c.Cod_cliente == 271
select c).ToList();
con.cliente.DeleteAllOnSubmit(cl);
con.SubmitChanges();
La forma de llamar a un procedimiento almacenado es realmente sencillo, solo basta con escribir en la variable de DataContext seguido por el nombre del procedimiento almacenado como se muestra a continuación:
var alu =con.SP_EDITAR_ALUMNO(1, "Luis Catacora Murillo");
Para paginar usando LINQ, para devolver valores saltándose unos resultados, por ejemplo de una consulta que devuelve 270 valores, quiero que muestre los valores del 6 al 15, con lo que tendremos que usar .Skip(5).Take(10) es decir, sáltate 5 valores y muestra 10 valores.
var clie = (from cl in con.cliente
select new { cl.Cod_cliente, cl.Nombre_cliente, cl.Pais }).Skip(5).Take(10);
El resultado sería:
Comentarios
Publicar un comentario