Использование LINQ с ASP.NET

Visual Studio 2010

Обновлен: Ноябрь 2007

Чтобы извлекать и вносить изменения в данные на веб-страницах, можно использовать LINQ. LINQ применяет принципы объектно-ориентированного программирования к реляционным данным. LINQ предоставляет унифицированную модель программирования для создания запросов из различных типов источников данных, а также расширяет возможности обработки данных непосредственно в языках C# и Visual Basic. Дополнительные сведения см. в разделе LINQ.

Можно использовать LINQ посредством элемента управления LinqDataSource, элемента управления ObjectDataSource или создавая запросы LINQ.

При использовании LINQ в веб-приложении, возможно, потребуется изменить файлы политики в целях безопасности доступа к коду. Эти изменения более подробно описаны далее в данном разделе.

Элемент управления LinqDataSource предоставляет простой способ подключения к данным из базы данных, или к коллекциям данных в памяти, например, к массивам. Можно декларативно записать все условия, необходимые для типичных сценариев, например, извлечение, фильтрация, систематизация и группирование данных. Элемент управления динамически создает запросы LINQ из значений, указанных декларативно.

При извлечении данных из таблицы из LINQ в класс контекста данных SQL, можно также настроить элемент управления LinqDataSource для обработки операций обновления, вставки и удаления. Элемент управления может выполнить это без необходимости написания команд SQL.

Чтобы отобразить данные на веб-странице, следует выполнить привязку элемента управления с привязкой к данным к элементу управления LinqDataSource. Примерами элементов управления с привязкой к данным являются элементы управления GridView или DetailsView.

В следующем примере демонстрируется разметка для элемента управления LinqDataSource, который подключается к базе данных AdventureWorks. Из таблицы Contact возвращаются записи со значением свойства EmailPromotion, равным 1.

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

Дополнительные сведения см. в разделе Общие сведения о серверном веб-элементе управления LinqDataSource.

Элемент управления ObjectDataSource используется в тех случаях, когда необходимо более сложное взаимодействие с данными, чем возможно обеспечить с помощью элемента управления LinqDataSource. Например, можно создавать методы обновления, изменяющие значения в присоединенных таблицах.

Элемент управления ObjectDataSource можно использовать с классом LINQ to SQL. Для этого в качестве значения свойства TypeName нужно задать имя класса контекста данных. Кроме того в качестве значений свойств SelectMethod, UpdateMethod, InsertMethod и DeleteMethod нужно задать методы в классе контекста данных, выполняющем соответствующие операции.

При использовании отложенного выполнения запроса с помощью элемента управления ObjectDataSource, необходимо создать обработчик событий для события ObjectDisposing, чтобы отменить удаление класса контекста данных. Этот шаг является обязательным, поскольку LINQ to SQL поддерживает отложенное выполнение, несмотря на попытку элемента управления ObjectDataSource удалить контекст данных после выполнения операции выбора.

Можно включить запросы LINQ в веб-страницу без использования элемента управления источника данных. Можно использовать запрос LINQ, если необходимо использовать оператор запроса, недоступный в элементе управления LinqDataSource. Также можно использовать такой запрос, если необходимо отображать данные только для чтения в элементе с привязкой к данным без обработки, которая требуется для создания элемента управления источника данных. Дополнительные сведения об операторах LINQ см. в разделе Общие сведения о стандартных операторах запроса. Список операторов запроса, доступных в элементе управления LinqDataSource см. в разделе Общие сведения о серверном веб-элементе управления LinqDataSource.

В следующем примере показывается, как использовать запрос LINQ на веб-странице. В данном примере демонстрируется результат работы запроса в элементе управления 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 в условиях среднего уровня доверия и высокого уровня доверия.

Использование LINQ в условиях среднего уровня доверия

Чтобы использовать LINQ в веб-приложении, запущенном со средним уровнем доверия, необходимо включить два элемента в политику файла, определенную для уровня доверия Medium. По умолчанию файлом политики для среднего уровня доверия является файл web_mediumtrust.config.

В элемент SecurityClasses добавьте элемент SecurityClass со следующими атрибутами:

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

В элементе PermissionSet с атрибутом Name, имеющим значение «ASP.Net», добавьте элемент IPermission со следующими атрибутами:

<IPermission
  class="ReflectionPermission"
  version="1"
  Flags="RestrictedMemberAccess"
/>
Bb907622.alert_note(ru-ru,VS.100).gifПримечание.

Элементы должны добавляться в ходе процесса установки.

Использование LINQ в условиях высокого уровня доверия

Чтобы использовать LINQ в веб-приложении, запущенном с высоким уровнем доверия, следует включить один элемент в файл политики, определенный для уровня доверия High. По умолчанию файлом политики для высокого уровня доверия является файл web_hightrust.config. Данный файл уже включает элемент IPermission в элементе PermissionsSet, который имеет ссылку на класс ReflectionPermission. При использовании LINQ следует изменить данный элемент.

В элементе PermissionSet с атрибутом Name, имеющим значение «ASP.Net», следует найти элемент IPermission для ReflectionPermission и установить для него следующее значение:

<IPermission
  class="ReflectionPermission"
  version="1"
  Flags="ReflectionEmit, RestrictedMemberAccess"
/>
Bb907622.alert_note(ru-ru,VS.100).gifПримечание.

В ходе процесса установки возможны изменения в данном элементе.

Показ: