Consultas SQL com Lambda (e nao Linq)

As expressoes Lambda ja existem desde o .NET 3.0 e foram, por assim dizer, aprimoradas com o .NET 3.5 usando o Linq.

Vamos a parte pratica da coisa, como diferenciar uma da outra com um simples Select.

Linq:

var C = from o in db.Orders where o.OrderID == 1 select new { o.OrderID };

Lambda:

var C = db.Orders.Where(o => o.OrderID == 1).Select(o => new { o.OrderID });

 

Como da pra notar a diferenca nao eh TAO grande para uma consulta simples. A desgraca comeca quando voce precisa fazer uma consulta um pouco mais elaborada:

Linq:

var orderDetails = from o in db.Orders
        where o.OrderID == orderID
        join s in db.Shippers on o.ShipVia equals s.ShipperID
        join od in db.OrderDetails on o.OrderID equals od.OrderID
        join p in db.Products on od.ProductID equals p.ProductID
        join supplier in db.Suppliers on p.SupplierID equals supplier.SupplierID
        let total = od.Quantity * od.UnitPrice
        select new OrderDescription {Product = p.ProductName, Quantity = od.Quantity, 
                     ShipperName = s.CompanyName, Total = total, UnitPrice=od.UnitPrice,
                     SupplierName = supplier.CompanyName};

Lambda:

var orderDetails = db.Orders.Where(order => order.OrderID == orderID).
        Join(db.Shippers, o => o.ShipVia, s => s.ShipperID, 
          (o, s) => new { o.OrderID, ShipCompanyName = s.CompanyName }).
        Join(db.OrderDetails, o => o.OrderID, od => od.OrderID, 
          (o, od) => new {o.ShipCompanyName, od.ProductID, od.Quantity, od.UnitPrice }).
        Join(db.Products, od => od.ProductID, p => p.ProductID, 
          (OrderDetails, p) => new { OrderDetails, p.ProductName, p.SupplierID }).
        Join(db.Suppliers, p => p.SupplierID, s => s.SupplierID, 
          (OrderData, s) => new { OrderData, SupplierName = s.CompanyName}).
        Select(o => new OrderDescription
        {
            Product = o.OrderData.ProductName,
            Quantity = o.OrderData.OrderDetails.Quantity,
            ShipperName = o.OrderData.OrderDetails.ShipCompanyName,
            Total = o.OrderData.OrderDetails.Quantity * o.OrderData.OrderDetails.UnitPrice,
            UnitPrice = o.OrderData.OrderDetails.UnitPrice,
            SupplierName = o.SupplierName
        });

 

Vale a pena usar o Lambda em questoes simples como uma verificacao de inclusao:

var C = db.Orders.Single(o => o.OrderID == 1);

Ou de uma alteracao:

Orders Alt = db.Orders.Single(o => o.OrderID == 1);

Alt.campo = novovalor;

 

Entao, o que voce prefere? Open-mouthed

Postado em s 3/4/2008 21:46:12 by Gh0stman

Permalink | Comments (0) | Post RSSRSS comment feed |

Categorias: ASP.NET | C# | Dicas | SQL

Tags: , , , ,

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

SQL Server 2005 Compact Edition

O Compact Edition (3.0) eh uma versao mais nova do SQL Mobile (2.0).
Sao necessarios 3 downloads para comecar a desenvolver, sao eles:

  1. SQL Server 2005 Compact Edition Embedded Engine
    Pacote de 1.7 mg. redestribuivel para uso e desenvolvimento em aplicativos Moveis quanto Desktop
  2. SQL Server 2005 Compact Edition Tools for Visual Studio 2005 Service Pack 1
    Melhorias alem de suporte ao ClickOnce, |DataDirectory| e arquivos CAB
  3. SQL Server 2005 Compact Edition Books Online
    Livros de ajuda

Eu aqui estou usando o VS.NET 2005 e axo que com as versoes Express vai ser a mesma baba.

No proprio site da Microsoft tem um link para uma pagina onde diz: Escolhendo entre a versao SQL Mobile ou SQL Express, que de um modo geral eu axei interessante para desenvolvimento onde voce soh tem um usuario por vez conectado a sua base de dados. Eu tive que desenvolver um aplicativo todo em DataSet (eh com consultas e tudo mais) para que o banco de dados nao fosse vista pelo cliente, quase morri, mas consegui no final de contas.

Entao... Depois vou postar como criar e acessar uma base de dados via aplicacao C#.

Postado em s 11/7/2007 21:58:00 by Gh0stman

Permalink | Comments (0) | Post RSSRSS comment feed |

Categorias: C# | SQL

Tags: , ,

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5