Compartir vía


Ejecución directa de consultas SQL

LINQ to SQL traduce las consultas que escribe en consultas SQL con parámetros (en formato de texto) y las envía al servidor SQL para su procesamiento.

SQL no puede ejecutar la variedad de métodos que podrían estar disponibles localmente para la aplicación. LINQ to SQL intenta convertir estos métodos locales en operaciones y funciones equivalentes que están disponibles en el entorno de SQL. La mayoría de los métodos y operadores de tipos integrados de .NET Framework tienen traducciones directas a comandos SQL. Algunos se pueden generar a partir de las funciones disponibles. Los que no se pueden generar generan excepciones en tiempo de ejecución. Para obtener más información, consulte asignación de tipos de SQL-CLR.

En los casos en los que una consulta LINQ to SQL no es suficiente para una tarea especializada, puede usar el ExecuteQuery método para ejecutar una consulta SQL y, a continuación, convertir el resultado de la consulta directamente en objetos.

Ejemplo 1

En el ejemplo siguiente, supongamos que los datos de la Customer clase se distribuyen en dos tablas (customer1 y customer2). La consulta devuelve una secuencia 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")

Siempre que los nombres de columna de los resultados tabulares coincidan con las propiedades de columna de la clase de entidad, LINQ to SQL crea los objetos fuera de cualquier consulta SQL.

Ejemplo 2

El ExecuteQuery método también permite parámetros. Use código como el siguiente para ejecutar una consulta con parámetros.

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'")

Los parámetros se expresan en el texto de la consulta mediante la misma notación curly usada por Console.WriteLine() y String.Format(). De hecho, String.Format() se llama realmente en la cadena de consulta que proporcionas, sustituyendo los parámetros entre llaves con nombres de parámetros generados, como @p0, @p1 ..., @p(n).

Consulte también