Visando que o Linq to SQL faz parte do pacote de tecnologias ADO.NET e seus serviços são prestados pelo modelo do provedor ADO.NET, isto torna possível juntar Linq to SQL com ADO.NET. Um exemplo claro, é possível criar uma nova instância de um DataContext utilizando uma conexão ADO.NET existente.

Em alguns casos pode ser que a consulta a ser realizada, ou a query a ser executada sejam muito específicas. Nestes casos é possível utilizar os métodos ExecuteCommand e ExecuteQuery para que comandos SQL sejam executados diretamente em seu banco de dados a partir de seu DataContext.

 

ExecuteCommand

O método ExecuteCommand permite que seja realizada uma consulta diretamente no banco de dados.

Exemplo:

 

int atualizado = _db.ExecuteCommand("UPDATE tbProdutosGrupos SET nome = 'Cristais' WHERE codProdutoGrupo = 8");
 
if (atualizado == 1)
   Console.WriteLine("O registro foi atualizado");
else
   Console.WriteLine("O registro não foi atualizado");

 

Observe que a query foi executada diretamente no banco de dados e retornou um inteiro (1 sucesso na operação e 0 falha na operação)

ExecuteQuery

O método ExecuteQuery permite que seja executada uma consulta SQL e converte o resultado diretamente em objetos.

Exemplo:

 

IEnumerable<tbProdutosGrupo> grupos =
 
_db.ExecuteQuery<tbProdutosGrupo>("SELECT * FROM tbProdutosGrupos ORDER BY nome");
 
Console.WriteLine("Quantidade de Grupos existentes: {0}", grupos.Count());

 

Neste caso a query foi executada e retornou um IEnumerable de tbProdutosGrupo.

NOTA: Atente-se que, como a query é executada diretamente no banco de dados, o nome da entidade deve ser o mesmo de sua tabela e não ao definido no DataContext.

Executando o código podemos ver as iterações com banco:



Rafael Zaccanini
MTAC – Microsoft Technical Audience Contributor

Blog: http://www.rafaelzaccanini.net
Twitter: 
@rafaelzaccanini
Facebook: http://www.facebook.com/RafaelZaccaniniNet