다음을 통해 공유


ASP.NET과 함께 LINQ 사용

업데이트: 2007년 11월

LINQ(통합 언어 쿼리)를 웹 페이지에 사용하여 데이터를 검색하고 수정할 수 있습니다. LINQ는 관계형 데이터에 개체 지향 프로그래밍 원리를 적용합니다. LINQ에서는 여러 유형의 데이터 소스에서 데이터를 쿼리하기 위한 통합 프로그래밍 모델을 제공하고 데이터 기능을 직접 C# 및 Visual Basic 언어로 확장합니다. 자세한 내용은 LINQ(통합 언어 쿼리)를 참조하십시오.

LINQ는 LinqDataSource 컨트롤이나 ObjectDataSource 컨트롤을 통해 또는 LINQ 쿼리를 만드는 방식으로 사용할 수 있습니다.

웹 응용 프로그램에서 LINQ를 사용하는 경우 코드 액세스 보안에 대한 정책 파일을 변경해야 할 수 있습니다. 이러한 변경 사항은 이 항목의 뒷부분에 설명되어 있습니다.

LinqDataSource 컨트롤

LinqDataSource 컨트롤을 사용하면 데이터베이스의 데이터 또는 배열 등의 메모리 내 데이터 컬렉션에 손쉽게 연결할 수 있습니다. 데이터 검색, 필터링, 정렬, 그룹화 등과 같은 일반적인 시나리오에 필요한 모든 조건을 선언적으로 작성할 수 있습니다. 컨트롤은 선언적으로 제공하는 값에서 LINQ 쿼리를 동적으로 만듭니다.

또한 LINQ to SQL 데이터 컨텍스트 클래스의 데이터를 검색하는 경우에는 업데이트, 삽입 및 삭제 작업을 처리할 수 있도록 LinqDataSource 컨트롤을 구성할 수 있습니다. 이러한 작업을 수행하기 위한 SQL 명령을 작성하지 않아도 컨트롤에서 이 작업을 수행합니다.

웹 페이지에 데이터를 표시하려면 데이터 바인딩된 컨트롤을 LinqDataSource 컨트롤에 바인딩합니다. 데이터 바인딩된 컨트롤의 예로는 GridView 또는 DetailsView 컨트롤이 있습니다.

다음 예제에서는 AdventureWorks 데이터베이스에 연결하는 LinqDataSource 컨트롤의 태그를 보여 줍니다. 이 예제에서는 Contact 테이블에서 EmailPromotion 속성 값이 1인 레코드를 반환합니다.

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

자세한 내용은 LinqDataSource 웹 서버 컨트롤 개요를 참조하십시오.

ObjectDataSource 컨트롤

LinqDataSource 컨트롤을 사용하는 경우보다 복잡한 방식으로 데이터와 상호 작용하려는 경우에는 ObjectDataSource 컨트롤을 사용합니다. 예를 들어 조인된 테이블에 설정 값이 포함된 업데이트 메서드를 만들 수 있습니다.

ObjectDataSource 컨트롤은 LINQ to SQL 클래스와 함께 사용할 수 있습니다. 이렇게 하려면 TypeName 속성을 데이터 컨텍스트 클래스 이름으로 설정합니다. 또한 SelectMethod, UpdateMethod, InsertMethodDeleteMethod 메서드를 데이터 컨텍스트 클래스에서 해당 작업을 수행하는 메서드로 설정합니다.

ObjectDataSource 컨트롤을 지연 쿼리 실행과 함께 사용하는 경우 데이터 컨텍스트 클래스의 삭제를 취소하려면 ObjectDisposing 이벤트에 대한 이벤트 처리기를 만들어야 합니다. 이 단계를 수행해야 하는 이유는 LINQ to SQL에서는 지연 실행을 지원하는 반면 ObjectDataSource 컨트롤에서는 Select 작업이 끝난 후 데이터 컨텍스트를 삭제하려고 하기 때문입니다.

LINQ 쿼리

데이터 소스 컨트롤을 사용하지 않고 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 사용

보통 신뢰 수준으로 실행되는 웹 응용 프로그램에서 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"/>

Name 특성이 "ASP.Net"으로 설정된 PermissionSet 요소 내에 다음과 같은 특성이 지정된 IPermission 요소를 추가합니다.

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

이 요소는 설치 프로세스가 진행되는 동안 추가할 수 있습니다.

높은 신뢰 수준으로 LINQ 사용

높은 신뢰 수준으로 실행되는 웹 응용 프로그램에서 LINQ를 사용하려면 High 신뢰에 대해 정의된 정책 파일에 요소 하나를 포함해야 합니다. 기본적으로 높은 신뢰에 대한 정책 파일은 web_hightrust.config 파일입니다. 이 파일은 이미 ReflectionPermission 클래스를 참조하는 PermissionsSet 요소 내에 IPermission 요소가 포함되어 있습니다. LINQ를 사용할 때는 이 요소를 수정해야 합니다.

Name 특성이 "ASP.Net"으로 설정된 PermissionSet 요소 내에서 ReflectionPermission에 대한 IPermission 요소를 찾아 다음과 같이 설정합니다.

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

이 요소는 설치 프로세스가 진행되는 동안 수정할 수 있습니다.

참고 항목

개념

LinqDataSource 웹 서버 컨트롤 개요

기타 리소스

LINQ(통합 언어 쿼리)