Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O LINQ para SQL traduz as consultas que escreve em consultas SQL parametrizadas (em forma de texto) e envia-as para o servidor SQL para processamento.
O SQL não consegue executar a variedade de métodos que podem estar disponíveis localmente para a sua aplicação. O LINQ para SQL tenta converter estes métodos locais em operações e funções equivalentes disponíveis dentro do ambiente SQL. A maioria dos métodos e operadores nos tipos incorporados do .NET Framework tem traduções diretas para comandos SQL. Alguns podem ser produzidos a partir das funções disponíveis. Os que não podem ser produzidos geram exceções em tempo de execução. Para mais informações, veja SQL-CLR Mapeamento de Tipos.
Nos casos em que uma consulta LINQ para SQL é insuficiente para uma tarefa especializada, pode usar o ExecuteQuery método para executar uma consulta SQL e depois converter o resultado da sua consulta diretamente em objetos.
Exemplo 1
No exemplo seguinte, assuma que os dados da Customer classe estão distribuídos por duas tabelas (customer1 e customer2). A consulta devolve uma sequência de Customer objetos.
Northwnd db = new Northwnd(@"c:\northwnd.mdf");
IEnumerable<Customer> results = db.ExecuteQuery<Customer>
(@"SELECT c1.custid as CustomerID, c2.custName as ContactName
FROM customer1 as c1, customer2 as c2
WHERE c1.custid = c2.custid"
);
Dim db As New Northwnd("c:\northwnd.mdf")
Dim results As IEnumerable(Of Customer) = _
db.ExecuteQuery(Of Customer) _
("SELECT c1.custID as CustomerID," & _
"c2.custName as ContactName" & _
"FROM customer1 AS c1, customer2 as c2" & _
"WHERE c1.custid = c2.custid")
Desde que os nomes das colunas nos resultados tabulares correspondam às propriedades das colunas da sua classe de entidade, o LINQ para SQL cria os seus objetos a partir de qualquer consulta SQL.
Exemplo 2
O ExecuteQuery método também permite parâmetros. Use código como o seguinte para executar uma consulta parametrizada.
Northwnd db = new Northwnd(@"c:\northwnd.mdf");
IEnumerable<Customer> results = db.ExecuteQuery<Customer>
("SELECT contactname FROM customers WHERE city = {0}",
"London");
Dim db As New Northwnd("c:\northwnd.mdf")
Dim results As IEnumerable(Of Customer) = _
db.ExecuteQuery(Of Customer) _
("SELECT contactname FROM customers WHERE city = {0}, 'London'")
Os parâmetros são expressos no texto da consulta usando a mesma notação curly usada por Console.WriteLine() e String.Format(). Na verdade, String.Format() é efetivamente chamado na cadeia de consulta que você fornece, substituindo os parâmetros entre chavetas por nomes de parâmetros gerados como @p0, @p1 ..., @p(n).