Compartir a través de


Usar LINQ con ASP.NET

Actualización: noviembre 2007

Puede utilizar Language-Integrated Query (LINQ) en páginas web para recuperar y modificar datos. LINQ aplica los principios de la programación orientada a objetos a los datos relacionales. Proporciona un modelo de programación unificado para realizar consultas de datos de tipos diferentes de orígenes de datos y extiende directamente las funciones de datos de los lenguajes C# y Visual Basic. Para obtener más información, vea Language-Integrated Query (LINQ).

Puede utilizar LINQ mediante el control LinqDataSource, mediante el control ObjectDataSource o creando consultas LINQ.

Si utiliza LINQ en una aplicación web, es posible que deba cambiar los archivos de directivas para la seguridad de acceso del código. Estos cambios se describen más adelante en este tema.

Control LinqDataSource

El control LinqDataSource proporciona una manera fácil de conectar a los datos de una base de datos o a una recolección de datos en memoria como una matriz. Puede escribir mediante declaración todas las condiciones necesarias para los escenarios típicos como la recuperación, filtrado, clasificación y agrupación de datos. El control crea dinámicamente las consultas LINQ a partir de los valores proporcionados mediante declaración.

Al recuperar datos de una clase de contexto de datos LINQ to SQL, también puede configurar un control LinqDataSource para administrar las operaciones de actualización, inserción y eliminación. El control realiza estas tareas sin requerir que se escriban comandos SQL para ello.

Para mostrar los datos en una página web, enlace un control enlazado a datos al control LinqDataSource. Los controles GridView y DetailsView son ejemplos de controles enlazados a datos.

En el ejemplo siguiente se muestra el marcado de un control LinqDataSource que conecta con la base de datos AdventureWorks. Devuelve los registros de la tabla Contact cuya propiedad EmailPromotion tiene un valor igual a 1.

<asp:LinqDataSource 
    ContextTypeName="AdventureWorksDataContext" 
    TableName="Contacts" 
    Where="EmailPromotion=1"
    ID="LinqDataSource1" 
    >
</asp:LinqDataSource>

Para obtener más información, vea Información general sobre el control de servidor web LinqDataSource.

Control ObjectDataSource

El control ObjectDataSource se utiliza cuando se desea interactuar con los datos de una manera más compleja que la que permite el control LinqDataSource. Por ejemplo, puede crear un método de actualización que permita establecer valores en tablas combinadas.

El control ObjectDataSource se puede utilizar con una clase LINQ to SQL. Para ello, se establece la propiedad TypeName en el nombre de la clase de contexto de datos. También se establecen los métodos SelectMethod, UpdateMethod, InsertMethod y DeleteMethod en los métodos de la clase de contexto de datos que realizan las operaciones correspondientes.

Si utiliza la ejecución diferida de consultas con el control ObjectDataSource, debe crear un controlador de eventos para el evento ObjectDisposing con el fin de cancelar la eliminación de la clase de contexto de datos. Este paso es necesario porque LINQ to SQL admite la ejecución diferida, mientras que el control ObjectDataSource intenta eliminar el contexto de datos después de la operación Select.

Consultas LINQ

Puede incluir consultas LINQ en una página web sin utilizar un control de origen de datos. Puede utilizar una consulta LINQ si necesita utilizar un operador de consulta que no está disponible en el control LinqDataSource. También puede utilizarlo si desea mostrar datos de sólo lectura en un control enlazado a datos sin el procesamiento necesario para crear un control de origen de datos. Para obtener más información sobre los operadores de LINQ, vea Información general sobre operadores de consulta estándar. Para obtener una lista de los operadores de consulta que están disponibles en el control LinqDataSource, vea Información general sobre el control de servidor web LinqDataSource.

En el ejemplo siguiente se muestra cómo incluir una consulta LINQ en una página web. El ejemplo muestra los resultados de la consulta en un control GridView.

[Visual Basic]

Protected Sub Page_Load(ByVal sender As Object, _
        ByVal e As System.EventArgs) Handles Me.Load
    If Not IsPostBack Then
        Dim dataContext As AdventureWorksDataContext = _
            New AdventureWorksDataContext()
        Dim query = From contact In dataContext.Contacts _
          Where contact.EmailPromotion = 1 _
          Select contact

        GridView1.DataSource = query
        GridView1.DataBind()
    End If
End Sub

[C#]

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        AdventureWorksDataContext dataContext = 
            new AdventureWorksDataContext();

        var query = from contact in dataContext.Contacts
          where contact.EmailPromotion==1
          select contact;

        GridView1.DataSource = query;
        GridView1.DataBind();
    }
}

LINQ y seguridad de acceso a código

En las secciones siguientes se proporciona información sobre cómo utilizar LINQ con un nivel de confianza medio y con un nivel de confianza alto.

Utilizar LINQ con un nivel de confianza medio

Para utilizar LINQ en una aplicación web que se ejecuta con un nivel de confianza medio, debe incluir dos elementos en el archivo de directivas definido para la confianza Medium. De forma predeterminada, el archivo web_mediumtrust.config es el archivo de directivas para el nivel de confianza medio.

En el elemento SecurityClasses, agregue un elemento SecurityClass con los siguientes atributos:

<SecurityClass 
  Name="ReflectionPermission" 
  Description="System.Security.Permissions.ReflectionPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>

En el elemento PermissionSet cuyo atributo Name está establecido en "ASP.Net", agregue un elemento IPermission con los siguientes atributos:

<IPermission
  class="ReflectionPermission"
  version="1"
  Flags="RestrictedMemberAccess"
/>
Nota:

Los elementos se pueden agregar durante el proceso de instalación.

Utilizar LINQ con un nivel de confianza alto

Para utilizar LINQ en una aplicación web que se ejecuta con un nivel de confianza alto, debe incluir un elemento en el archivo de directivas definido para la confianza High. De forma predeterminada, el archivo web_hightrust.config es el archivo de directivas para el nivel de confianza alto. Este archivo ya incluye un elemento IPermission dentro de un elemento PermissionsSet que hace referencia a la clase ReflectionPermission. Debe modificar este elemento cuando utilice LINQ.

En el elemento PermissionSet cuyo atributo Name está establecido en "ASP.Net", busque el elemento IPermission de ReflectionPermission y establézcalo de la siguiente manera:

<IPermission
  class="ReflectionPermission"
  version="1"
  Flags="ReflectionEmit, RestrictedMemberAccess"
/>
Nota:

Este elemento se puede modificar durante el proceso de instalación.

Vea también

Conceptos

Información general sobre el control de servidor web LinqDataSource

Otros recursos

Language-Integrated Query (LINQ)