portabilidade, quantas vezes eu tive que sair cacando SQLs que pararam de funcionar porque saiu do Access pro MySql ou do MySql pro SqlServer e ate mesmo pro Oracle?Com o Linq acabou isso tudo, e a forma que ele trata as queries torna a coisa mais facil para se programar, o Visual Studio integra todo mundo perfeitamente, e com pouca coisa ja se sai programando normalmente conseguindo uma producao normal em qualquer cenario de trabalho.Inicialmente devemos instanciar o banco de dados na classe que sera criado a querie Linq, Vou dar como exemplo a forma que eu instancio, lembrando que nesse exemplo eu estou usando o Linq to Entities[Atualizacao = Observacao muito bem vinda do Bernardo do grupo .Net-Br usar o using ao invez de declarar direto como eu fiz, faz que o dispose seja automatico]using BancoEntities BD = new BancoEntities();Caso nao saiba fazer uma conexao de exemplo, aqui mesmo no blog eu ja postei sobre como fazer uma conexao com o MySqlNum banco de dados de exemplo poderiamos colocar as tabelas:TbFuncionariosFuncId - Int - PkFuncNom - VarChar - 50 CaracteresFuncEnd - VarChar - 100 CaracteresTbHorariosHorId - Int - PkFuncId - Int - FkHorManha - HoraHorTarde - HoraHorDat - DataNao vou me ater muito a modelagem porque esse nao e o proposito do post, e para o aprendizado essas duas tabelas ja estao bem, veja que temos um relacionamento de um para muitos (um funcionario muitos horarios)Vamos Iniciar com um select simples na tabela de funcionariosSql => Select FuncId, FuncNom, FuncEnd from tbFuncionariosLinq => from Listagem in BD.tbFuncionarios select new {Listagem.FuncId, Listagem.FuncNom, Listagem.FuncEnd}Sql => Select * from tbFuncionariosLinq => from Listagem in BD.tbFuncionarios select Listagemlembrando que usar o * em SQLs prejudica a performance porque o comando tem que ir na tabela central do banco de dados achar quem sao todos os campos da tabela em questao para so depois dar select nelas, ja no Linq isso nao ocorre porque ele ja tem a referencia pelo Entities.ja um select com where:Sql=> Select FuncId, FuncNom, FuncEnd from tbFuncionarios where FuncNom = 'XXX'Linq=> from Listagem in BD.tbFuncionarios where Listagem.FuncNom == 'XXX' select new {Listagem.FuncId, Listagem.FuncNom, Listagem.FuncEnd}Por estarmos lidando com uma linguagem tipada e bom nao esquecer de que as comparacoes do where sao obrigatoriamente do mesmo tipo ou seja string == string, int==int, e assim por diante, frisando bem CHAR NAO E IGUAL VARCHAR, INT NAO E IGUAL A DOUBLEMas nao estamos a beira do precipicio nesse sentido, porque vc pode usar os casts ou seja o .ToString() e assim por diante, o importante e que na comparacao final os tipos estejam devidamente igualados, senao nao funcionae que tal com o order by?SQL=> Select FuncId, FuncNom, FuncEnd from tbFuncionarios order by FuncNomLinq=>from Listagem in BD.tbFuncionarios order by Listagem.FuncNom select new {Listagem.FuncId, Listagem.FuncNom, Listagem.FuncEnd}agora algo que revirei por horas por algo entendivel na net e nao achei, e muita mas muita gente mesmo tem essa duvida que e o famoso inner joinSQL=> Select FuncId, FuncNom, FuncEnd, tbHorarios.HorManha from tbFuncionarios inner join tbHorarios on tbHorarios.FuncId = Funcionarios.FuncId order by FuncNomLinq=> from Listagem in BD.tbFuncionarios join ListaHoras