Mantenimiento Maestro-Detalle en WindowsForms con LINQ Octubre 29, 2008
Posted by elmercarias in .Net, LINQ.Tags: .Net, linq
2 comments
Siguiendo con lo del Mantenimiento en Windows Forms con LINQ, en esta entrada veremos como crear un Maestro-Detalle con LINQ, para este ejemplo utilizaremos de base el Proyecto creado en el posteo anterior “Mantenimiento en WindowsForms con LINQ”.
1) Abrir la Forma “Form1″ del Mantenimiento de Regiones, y abrir la ventana de “Data Sources”, donde buscaremos bajo Region la Relación con la Entidad Territories.
Mantenimiento en WindowsForms con LINQ Octubre 28, 2008
Posted by elmercarias in .Net, LINQ.Tags: .Net, linq
4 comments
Me hicieron una consulta hace un par de días de como hacer un Mantenimiento con LINQ, y como solo lo había utilizado para lecturano me había puesto a investigar sobre como utilizarlo completamente, debido a esa pregunta averigue como hacerlo y les comentaré como hacerlo.
1) Crear un Proyecto WindowsForms
Como recuperar datos con LINQ desde un Procedimiento Almacenado Septiembre 9, 2008
Posted by elmercarias in .Net, LINQ.Tags: .Net, linq
add a comment
Hace un par de días un amigo me consulto sobre como obtener el resultado de un Procedimiento Almacenado que devuelve varios registros de datos y que esta compuesto por campos de varias tablas.
La solucion que se me ocurrió en su momento fue Crear una Entidad en el Diseñador de LINQ to SQL y despues hacer que el Procedimiento almacenado devilviera ese tipo de entidad.
Pero despues de probar bien, me di cuenta de que no es necesario crear una Entidad Nueva, ya que el diseñador lo hace automaticamente. Para el ejemplo utilizaremos la base de datos Northwind.
Nota: El Procedimiento Almacenado que utilizaremos se llama [Ten Most Expensive Products] : el cual devuelve los 10 Productos con Mayor Precio
Pasos a seguir:
1) Creamos un Proyecto Web Visual Basic (para el ejemplo lo haremos de esta forma, aunque puede ser Windows)
LINQ una buena alternativa Abril 2, 2008
Posted by elmercarias in .Net.Tags: .Net, linq
2 comments
En las ultimas semanas he estado conociendo mas sobre las novedades de Visual Studio 2008, y una de las que mas me llama la atención es la tecnología LINQ, ya que ofrece mucha versatilidad para acceder los datos.
Pienso que es mas fácil de usar ya que no es necesario conocer mucho sobre SQL para realizar consultas complejas.
Como introducción les comento que LINQ ha sido creado para estandarizar el acceso a los datos, estos sean XML, una Base de Datos, ya sea Microsoft SQL Server, Oracle, Sybase etc.; así como tambien el manejo de Objetos en memoria. Esto es lo que mas llama la atención porque permitirá acostumbrarse a una sola sintaxis para acceder a los datos.
La manera mas fácil de tener acceso a objetos creados con LINQ, hay que adicionar a nuestro proyecto un nuevo Item llamado “LINQ to SQL”
Y en esta pantalla arrastrar los objetos que deseemos, en la imagen de ejemplo se utiliza la base de Datos Northwind,
Despues de seguir los pasos de previa configuración
Ejemplo #1:
Despues en cualquier ubicación de nuestra aplicación podemos hacer el siguiente ejemplo sencillo:
Dim query = from c in Customers
where c.Country = “Italy”
select c.CompanyName
El resultado de lo anterior es una Colección de Strings(que queda guardado en “query”), conteniendo los Nombres de Clientes(Customers) del país de Italia.
El query que genera y ejecuta es el siguiente:
Select CompanyName
From Customers
Where Country = “Italy”
Se preguntarán ¿Porque esta primero el FROM y despues el SELECT al escribirlo con LINQ?
Eso responde a que como .Net ofrece Intellisense en el SELECT y en el FROM es necesario decirle sobre que objeto se hará SELECT, y así el IDE nos ofrece el Intellisense.
El resultado obtenido en la variable “query” puede ser utilizado como origen de datos de un DropDownList, ListBox, etc.
Si notan en este primer ejemplo es completamente sencillo y no se ve la potencia de LINQ.
Ejemplo #2
En este ejemplo devolveremos los Clientes que tienen mas de 20 Ordenes de Compra(Orders) en el sistema
Dim query = from c in Customers
where c.Orders.Count > 20
select c.CompanyName
Esta ejecución genera el Query :
Select c0.CompanyName
From Customers AS c0
Where (Select Count(*)
From Orders AS c1
Where c1.CustomerID = c0.CustomerID
) > 20
En este ejemplo ya se empieza a ver que lo versatil de LINQ, ya que en sintaxis LINQ solamente se hace referencia a la relación con Orders y se utiliza la propiedad Count para comparar que sea mayor a 20,
si lo hubieramos hecho en SQL hubieramos que tenido que hacer el SubQuery para ese calculo.
Ejemplo #3
En este ejemplo a diferencia del anterior devolveremos las Ordenes de los Clientes que tienen mas de 20 Ordenes de Compra en el sistema
Dim query = from c in Customers
where c.Orders.Count > 20
select c.CompanyName, c.Orders
Esta ejecución genera los siguientes querys:
El primero es para devolver el listado principal de Compañias
SELECT [t0].[CompanyName], [t0].[CustomerID]
FROM [dbo].[Customers] AS [t0]
WHERE ((
SELECT COUNT(*)
FROM [dbo].[Orders] AS [t1]
WHERE [t1].[CustomerID] = [t0].[CustomerID]
)) > 20
El segundo es ejecutado para cada Customer del Query, en este caso son 3; esto es ejecutado en el RowDataBound del GridView donde se implementa el llenado de las Ordenes
SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate],
[t0].[RequiredDate], [t0].[ShippedDate], [t0].[ShipVia], [t0].[Freight],
[t0].[ShipName], [t0].[ShipAddress], [t0].[ShipCity], [t0].[ShipRegion],
[t0].[ShipPostalCode], [t0].[ShipCountry]
FROM [dbo].[Orders] AS [t0]
WHERE [t0].[CustomerID] = @CustomerID
Bueno esto es un poco de lo que se puede hacer con LINQ, en este caso LINQ con SQL, en proxima entrega hablare de LINQ sobre XML y LINQ sobre Objetos.
Atte. Elmer Carías
“El fracaso tiene mil excusas, el éxito no requiere explicación.”

