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

Caracteres de Escape no C#

Quais sao os caracteres de escape (character escape sequences) no C#?

C# define os seguintes como sequencias de caracteres de escape:

  • \' - single quote, needed for character literals
  • \" - double quote, needed for string literals
  • \\ - backslash
  • \0 - Unicode character 0
  • \a - Alert (character 7)
  • \b - Backspace (character 8)
  • \f - Form feed (character 12)
  • \n - New line (character 10)
  • \r - Carriage return (character 13)
  • \t - Horizontal tab (character 9)
  • \v - Vertical quote (character 11)
  • \uxxxx - Unicode escape sequence for character with hex value xxxx
  • \xn[n][n][n] - Unicode escape sequence for character with hex value nnnn (variable length version of \uxxxx)
  • \Uxxxxxxxx - Unicode escape sequence for character with hex value xxxxxxxx (for generating surrogates)

 

Open-mouthed

Postado em s 15/3/2008 15:49:04 by Gh0stman

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

Categorias: C# | Dicas

Tags: ,

Be the first to rate this post

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

string.Empty ou "" ?

Quem afinal de contas eh o mais rapido na hora de fazer uma comparacao?

str=="" 
str.Equals("")
str==string.empty 
str.Equals(string.empty) 
string.Length==0 

Depois de muita busca no google e no google groups achei alguns artigos sobre o assunto.
Mas o melhor foi ter encontrado um chart com comparativos com as velocidades onde:

As string normal tem 10 caracteres e as long tem 100.

 

stringtime

 

O que acontece eh que o uso de "" faz com que o framework crie um objeto para entao verificar se o mesmo esta vazio, o que interfere na performance. A melhor opcao eh o uso do str.Lenght == 0 como mostra o grafico. Claro que isso pode ser diferente nas proximas versoes do .NET mas de qualquer forma vale o conhecimento.

 

fontes: Brendan Tompkins [MVP] e Google Groups

Postado em s 26/12/2007 11:58:38 by Gh0stman

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

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

Tags: , , ,

Currently rated 3.0 by 1 people

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

Como transformar string ou int em enumeradores

Voce ja esta familiarizado com o conceito de enumeradores? Nao? E com o conceito type-safe?

Exemplos de type-safe com enumeradores:

string Nome = string.Empty;
System.Drawing.Color.Blue;

Mas como que eu crio enumeradores para comeco de conversa:

public enum Ativo
{
      Nao = 0,
      Sim = 1,
}

Agora vamos ao que interessa:

int Ativow = 1;
Ativo at = (Ativo)Enum.Parse(typeof(Ativo), Ativow.ToString(), true);
switch (at)
{
      case Ativo.Nao:
            return "inativo";
            break;
      case Ativo.Sim:
            return "ativo";
            break;
}

Postado em s 23/11/2007 13:11:25 by Gh0stman

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

Categorias: ASP.NET | C# | Dicas

Tags: , , ,

Be the first to rate this post

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

C# .NET: Converter System.Drawing.Color para cor HTML

Aqui tem um exemplo de como converter de System.Drawing.Color para o formato de cor HTML (HEX ou nome de cor HTML) e vice-versa.

System.Drawing.Color c = System.Drawing.ColorTranslator.FromHtml("#F5F7F8");
String strHtmlColor = System.Drawing.ColorTranslator.ToHtml(c);

 

post original por Chris

Postado em s 5/11/2007 20:18:00 by Gh0stman

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

Categorias: C# | Dicas

Tags: , ,

Be the first to rate this post

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

Como passar uma variavel de dentro de uma Thread para um TextBox

Sempre que eu precisava falar com algum text box fora de uma Thread eu usava uma variavel global para isso. Mas depois de googlear com calma descobri que tem como fazer isso com mais.... Classe...  Wink

Inclua

using System.Threading;

No evento de Click de botao coloque o seguinte codigo:

Thread t = new Thread(new ThreadStart(SayHiThread));
t.IsBackground = true;
t.Start();

Coloque esse codigo dentro do Form

private void SayHiThread()
{
 Invoke(new SayHiDelegate(SayHi), new object [] { "Hello from the thread" });
}
private void SayHi(string msg)
{
 myTextbox.Text = msg;
}

Fora do classe do Form coloque

public delegate void SayHiDelegate(string msg); 

Tambem eh possivel tambem passar mais de uma variavel para o delegate, por exemplo

public delegate void Escreve(string Texto, Color Cor);
private void Escreve_Texto(string Texto, Color Cor)
{
 myRichTextBox.text = Texto;
 myRichTextBox.Color = Cor;
}

Dentro da Thread

Invoke(new Escreve(Escreve_Texto), new object[] { "Oi da thread.", Color.Red });
 

Artigo original de: James T. Johnson

Postado em s 2/8/2007 14:43:00 by Gh0stman

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

Categorias: C# | Dicas

Tags: ,

Currently rated 5.0 by 1 people

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

Multiplos DataKeys em um DataGrid

Segue a solucao de um problema que tive a algum tempo atras, trabalhar com multiplos DataKeys dentro de um mesmo DataGrid.

C#
GridView.DataKeys[Index1].Values[Index2] 
VB.NET
GridView.DataKeys(Index1).Values(Index2) 

Postado em s 24/7/2007 10:24:00 by Gh0stman

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

Categorias: C# | Dicas | ASP.NET

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

Windows Mobile 5

Chegou pra gente aqui na empresa um HP 6945 da TIM para demonstracao/desenvolvimento e vai ficar aqui por aproximadamente 3 semanas. O desenvolvimento para mobiles no brasil ainda eh muito pequeno mas de algum lugar ele tem q comecar e por isso resolvemos aqui na empresa que vamos comecar a desenvolver aplicacoes para ele... O que nao eh nada tao dificil assim dependendo do nivel de aplicacao que voce quer.

Vou postar alguns codigos que estou testando pra ver o que pra fazer:

Ver se o celular esta em area local ou em viagem (roaming)
Abra o VS 2005FileNew Project → (no meu caso) Visual C#Windows Mobile 5.0 Pocket PCDevice Application
De um nome ao projeto e clique em OK

Leve o mouse ate o Solution Explorer e va na parte de References → (botao direito) Add Reference → Incluia todas as referencias do Microsoft.WindowsMobile e a do Windows.WindowsCE.

Agora vamos fazer um programinha simples para ligar para alguem direto do smartphone.

Va no ToolBox e inclua um Button, para adicionar um evento clique duas vezes sobre o mesmo.

Inclua o using Microsoft.WindowsMobile.Telephony; no cabecalho para ter acesso a classe de telefonia.

E dentro do evento do botao

Phone myPhone = new Phone();
myPhone.Talk("012345678\0", true); 

\0 no final da string eh de outros sites que andei pesquisando sobre um bug no final da string e com isso resolve. Ja o true no final eh para perguntar ao user se ele quer realmente ligar ou nao (se nao tiver ele entende que deve ligar direto sem perguntar).

Mande rodar (F5) e mande fazer o Deploy no seu smartphone, se estiver tudo certo, quando voce apertar o botao ele deve discar para onde voce quiser.

Quanto mais for aprendendo, mais vou colocando...Smile

Postado em s 3/7/2007 9:32:00 by Gh0stman

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

Categorias: C#

Tags: ,

Be the first to rate this post

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

Primeiro post de uma vida nova

Esse novo sistema de blogs que axei na net vai ser muito util pra mim.

Axei esse cara, o BlogEngine.Net no novo site de OpenSource da Microsoft. Muito bom por sinal e totalmente user friendly (basta saber um poko de ingles).

Os posts antigos de programacao eu vow recolocar aqui. Pois tambem me interessam quando eskeco de alguma coisa.

Postado em s 21/6/2007 12:05:00 by Gh0stman

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

Categorias: C# | ASP.NET

Tags: , ,

Be the first to rate this post

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