Compartir a través de


Cómo: Ejecutar directamente consultas SQL (LINQ to SQL)

Actualización: November 2007

LINQ to SQL convierte las consultas que se escriben en consultas SQL parametrizadas (en formato de texto) y las envía al servidor SQL Server para su procesamiento.

SQL no puede ejecutar todos los métodos que podrían estar localmente disponibles para una 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 los tipos integrados de .NET Framework tienen comandos SQL que son equivalentes directos. Algunos se pueden generar a partir de las funciones que están disponibles. Aquéllos que no se pueden generar, inician excepciones en tiempo de ejecución. Para obtener más información, consulte Correspondencia de tipos SQL-CLR (LINQ to SQL).

Cuando una consulta LINQ to SQL no es suficiente para una tarea especializada, puede utilizar el método ExecuteQuery para ejecutar una consulta SQL y después convertir el resultado de la consulta directamente en objetos.

Ejemplo

En el ejemplo siguiente, supongamos que los datos de la clase Customer ocupan dos tablas (customer1 y customer2). La consulta devuelve una secuencia de objetos Customer.

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

Siempre y cuando los nombres de columna de los resultados tabulares coincidan con las propiedades de columna de la clase de entidad, LINQ to SQL crea objetos a partir de cualquier consulta SQL.

El método ExecuteQuery también permite el uso de parámetros. Utilice código como el siguiente para ejecutar una consulta parametrizada.

    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'")
Northwnd db = new Northwnd(@"c:\northwnd.mdf");
IEnumerable<Customer> results = db.ExecuteQuery<Customer>
    ("SELECT contactname FROM customers WHERE city = {0}",
    "London");

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

Vea también

Otros recursos

Información general (LINQ to SQL)

Realizar consultas en la base de datos (LINQ to SQL)