jump to navigation

Mantenimiento Maestro-Detalle en WindowsForms con LINQ Octubre 29, 2008

Posted by elmercarias in .Net, LINQ.
Tags: ,
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.

Mostrando la Relacion con la Entidad Territories

Mostrando la Relacion con la Entidad Territories

(más…)

Mantenimiento en WindowsForms con LINQ Octubre 28, 2008

Posted by elmercarias in .Net, LINQ.
Tags: ,
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

Creacion de Proyecto Windows Forms

Creacion de Proyecto Windows Forms

(más…)

Como recuperar datos con LINQ desde un Procedimiento Almacenado Septiembre 9, 2008

Posted by elmercarias in .Net, LINQ.
Tags: ,
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)

(más…)

LINQ una buena alternativa Abril 2, 2008

Posted by elmercarias in .Net.
Tags: ,
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.”