ASP.NET での LINQ の使用
更新 : 2007 年 11 月
Web ページで統合言語クエリ (LINQ: Language-Integrated Query) を使用して、データを取得および変更できます。LINQ は、オブジェクト指向プログラミングの原則をリレーショナル データに適用します。LINQ は、さまざまな種類のデータ ソースのデータを照会するための統一プログラミング モデルを提供し、C# 言語および Visual Basic 言語にデータ機能を直接拡張します。詳細については、「統合言語クエリ (LINQ: Language-Integrated Query)」を参照してください。
LINQ を使用するには、LinqDataSource コントロールまたは ObjectDataSource コントロールを使用するか、LINQ クエリを作成します。
Web アプリケーションで LINQ を使用するときに、コード アクセス セキュリティのポリシー ファイルを変更することが必要になる場合があります。これらの変更については、このトピックの後半で説明します。
LinqDataSource コントロール
LinqDataSource コントロールを使用すると、データベースのデータや、配列などのメモリ内データ コレクションに簡単に接続できます。データの取得、フィルタ処理、順序付け、グループ化などの一般的なシナリオに必要なすべての条件を宣言によって記述できます。このコントロールでは、宣言によって指定した値から LINQ クエリを動的に作成します。
LINQ to SQL データ コンテキスト クラスからデータを取得する場合は、更新、挿入、および削除の各操作を処理するように LinqDataSource コントロールを構成することもできます。このコントロールを使用してこれらのタスクを実行する場合、SQL コマンドを記述する必要はありません。
Web ページにデータを表示するには、データ バインド コントロールを LinqDataSource コントロールにバインドします。データ バインド コントロールには、GridView コントロールや DetailsView コントロールなどがあります。
AdventureWorks データベースに接続する LinqDataSource コントロールのマークアップの例を次に示します。この例では、Contacts テーブルから EmailPromotion プロパティの値が 1 であるレコードが返されます。
<asp:LinqDataSource
ContextTypeName="AdventureWorksDataContext"
TableName="Contacts"
Where="EmailPromotion=1"
ID="LinqDataSource1"
runat="server">
</asp:LinqDataSource>
詳細については、「LinqDataSource Web サーバー コントロールの概要」を参照してください。
ObjectDataSource コントロール
LinqDataSource コントロールで可能な方法よりも複雑な方法でデータを操作する場合は、ObjectDataSource コントロールを使用します。たとえば、結合されたテーブルの設定値を含む更新メソッドを作成できます。
LINQ to SQL クラスで ObjectDataSource コントロールを使用できます。そのためには、TypeName プロパティをデータ コンテキスト クラスの名前に設定します。また、SelectMethod、UpdateMethod、InsertMethod、および DeleteMethod の各メソッドを、対応する操作を実行するデータ コンテキスト クラスのメソッドに設定します。
ObjectDataSource コントロールでクエリの遅延実行を使用する場合は、データ コンテキスト クラスの破棄を取り消すために、ObjectDisposing イベントのイベント ハンドラを作成する必要があります。LINQ to SQL は遅延実行をサポートしていますが、ObjectDataSource コントロールは Select 操作の後にデータ コンテキストを破棄しようとするため、この手順が必要となります。
LINQ クエリ
データ ソース コントロールを使用せずに、LINQ クエリを Web ページに含めることができます。LinqDataSource コントロールで使用できないクエリ演算子を使用する必要がある場合は、LINQ クエリを使用できます。また、データ ソース コントロールを作成する必要がある処理は行わずに、データ バインド コントロールに読み取り専用データを表示する場合にも使用できます。LINQ 演算子の詳細については、「標準クエリ演算子の概要」を参照してください。LinqDataSource コントロールで使用できるクエリ演算子の一覧については、「LinqDataSource Web サーバー コントロールの概要」を参照してください。
Web ページに 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 の使用
中程度の信頼で実行されている Web アプリケーションで LINQ を使用するには、Medium の信頼レベル用に定義されているポリシー ファイルに、2 つの要素を追加する必要があります。既定では、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 の使用
高い信頼で実行されている Web アプリケーションで LINQ を使用するには、High の信頼レベル用に定義されているポリシー ファイルに、1 つの要素を追加する必要があります。既定では、web_hightrust.config ファイルが高い信頼のポリシー ファイルです。このファイルでは、PermissionsSet 要素内に、ReflectionPermission クラスを参照する IPermission 要素が既に含まれています。LINQ を使用するときは、この要素を変更する必要があります。
Name 属性が "ASP.Net" に設定されている PermissionSet 要素内で、ReflectionPermission に対する IPermission 要素を探し、次のように設定します。
<IPermission
class="ReflectionPermission"
version="1"
Flags="ReflectionEmit, RestrictedMemberAccess"
/>
メモ : |
---|
この要素は、インストール プロセスで変更されている場合があります。 |
参照
概念
LinqDataSource Web サーバー コントロールの概要