Partilhar via


Como: Executar consultas SQL diretamente

O LINQ to SQL traduz as consultas que você escreve em consultas SQL parametrizadas (em forma de texto) e as envia para o servidor SQL para processamento.

O SQL não pode executar a variedade de métodos que podem estar disponíveis localmente para seu aplicativo. O LINQ to SQL tenta converter esses métodos locais em operações e funções equivalentes que estão disponíveis dentro do ambiente SQL. A maioria dos métodos e operadores em tipos internos do .NET Framework têm traduções diretas para comandos SQL. Alguns podem ser produzidos a partir das funções que estão disponíveis. Aqueles que não podem ser produzidos geram exceções em tempo de execução. Para obter mais informações, consulte Mapeamento de tipo SQL-CLR.

Nos casos em que uma consulta LINQ to SQL é insuficiente para uma tarefa especializada, você pode usar o ExecuteQuery método para executar uma consulta SQL e, em seguida, converter o resultado da consulta diretamente em objetos.

Exemplo 1

No exemplo a seguir, suponha que os dados para a Customer classe estão distribuídos em duas tabelas (customer1 e customer2). A consulta retorna 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 da coluna da sua classe de entidade, o LINQ to SQL cria seus objetos a partir de qualquer consulta SQL.

Exemplo 2

O ExecuteQuery método também permite parâmetros. Use um 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 curva usada por Console.WriteLine() e String.Format(). Na verdade, String.Format() é realmente chamado na cadeia de caracteres de consulta que você fornece, substituindo os parâmetros curly braced por nomes de parâmetros gerados, como @p0, @p1 ..., @p(n).

Consulte também