Share via


Usando LINQ com o ASP.NET

Você pode usar a Consulta Linguagem-Integrada (LINQ) em páginas da Web para recuperar e modificar dados.LINQ utiliza os princípios de programação orientada à objetos para dados relacionais.Ela fornece um modelo de programação unificado para requisitar dados de diferentes tipos de fontes de dados e estende as capacidades dos dados diretamente para as linguagens C# e Visual Basic.Para obter mais informações, consulte Language-Integrated Query (LINQ).

Você pode usar LINQ por meio do controle LinqDataSource, através do controle ObjectDataSource, ou criando consultas LINQ.

Quando você usa LINQ em um aplicativo da Web, talvez você precise alterar os arquivos de diretiva para a segurança de código de acesso.Essas alterações são descritas posteriormente neste tópico.

Controle LinqDataSource

O controle LinqDataSource fornece uma maneira fácil para conectar-se aos dados a partir de um banco de dados ou em uma coleção de dados na memória como uma matriz.Você pode escrever declarativamente todas as condições que são necessárias para cenários típicos, como recuperação, filtragem, pedido e agrupamento dos dados.O controle dinamicamente cria as consultas LINQ dos valores que você fornecer declarativamente.

Quando você recupera dados de uma classe de contexto de dados LINQ to SQL, você também pode configurar um controle LinqDataSource para manipular as operações de atualizar, inserir e excluir.O controle faz isso sem exigir que você escreva os comandos SQL para executar essas tarefas.

Para exibir os dados em um página da Web, você vincula um controle vinculado a dados ao controle LinqDataSource.Exemplos de controles ligados a dados são os controles GridView ou DetailsView.

O exemplo a seguir mostra a marcação de um controle LinqDataSource que se conecta ao banco de dados AdventureWorks.Ele retorna registros da tabela de contatos que tenham um valor na propriedade EmailPromotion igual a 1.

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

Para obter mais informações, consulte Visão geral sobre o controle de servidor Web LinqDataSource.

Controle ObjectDataSource

Você usa o controle ObjectDataSource quando você deseja interagir com os dados de uma forma mais complexa do que é possível com o controle LinqDataSource.Por exemplo, você pode criar um método de atualização que inclui os valores de configuração em tabelas associadas.

Você pode usar o controle ObjectDataSource com uma classe LINQ para SQL.Para fazer isso, você define a propriedade TypeName como o nome da classe de contexto de dados.Você também definir os métodos SelectMethod, UpdateMethod, InsertMethod e DeleteMethod para os métodos na classe de dados-contexto que executam as operações correspondentes.

Quando você usa a exceção de consulta deferida com o controle ObjectDataSource, você deve criar um manipulador de eventos para o evento ObjectDisposing para cancelar o descarte da classe de dados-contexto.Essa etapa é necessária porque LINQ to SQL dá suporte à execução adiada, enquanto o controle ObjectDataSource tenta descartar o contexto de dados após a operação selecionar.

Consultas LINQ

Você pode incluir consultas LINQ em um página da Web sem usar um controle da fonte de dados.Você pode usar uma consulta LINQ se você precisar usar um operador de consulta que não está disponível no controle LinqDataSource.Você também pode usá-lo se você deseja exibir dados somente leitura em um controle vinculado a dados sem o processamento que é necessário para criar um controle da fonte de dados.Para obter mais informações sobre operadores LINQ, consulte Visão geral sobre operadores de consulta padrãoPara obter uma lista dos operadores de consulta que estão disponíveis no controle LinqDataSource, consulte Visão geral sobre o controle de servidor Web LinqDataSource.

O exemplo a seguir mostra como incluir uma consulta LINQ em uma página da Web.O exemplo exibe os resultados da consulta em um controle 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 e segurança de código de acesso

As seções a seguir fornecem informações sobre como usar LINQ em confiança média e, em alta confiança.

Usando LINQ com confiança média

Para usar LINQ em um aplicativo da Web que está executando em confiança média, você deve incluir dois elementos no arquivo de diretiva que está definido para relação de confiança Medium.Por padrão, o arquivo Web_mediumtrust.config é o arquivo de diretiva para confiança média.

Dentro do elemento SecurityClasses, adicione um elemento SecurityClass com os seguintes atributos:

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

Dentro do elemento PermissionSet que tem o atributo Name definido como "ASP.NET", adicione um elemento IPermission que possui os seguintes atributos:

<IPermission
  class="ReflectionPermission"
  version="1"
  Flags="RestrictedMemberAccess"
/>
Observação:

Os elementos podem ter sido adicionados durante o processo de instalação.

Usando LINQ com confiança alta

Para usar LINQ em um aplicativo da Web que está executando em confiança alta, você deve incluir um elemento no arquivo de diretiva que está definido para relação de confiança High.Por padrão, o arquivo Web_hightrust.config é o arquivo de diretiva de alta confiança.Este arquivo já inclui um elemento IPermission dentro de um elemento PermissionsSet que faz referência à classe ReflectionPermission.Você deve modificar este elemento ao usar LINQ.

Dentro do elemento PermissionSet que tem o atributo Name definido como "ASP.NET", localize o elemento IPermission para ReflectionPermission e o defina da seguinte maneira:

<IPermission
  class="ReflectionPermission"
  version="1"
  Flags="ReflectionEmit, RestrictedMemberAccess"
/>
Observação:

Esse elemento pode ter sido modificado durante o processo de instalação.

Consulte também

Conceitos

Visão geral sobre o controle de servidor Web LinqDataSource

Outros recursos

Language-Integrated Query (LINQ)