次の方法で共有


チュートリアル: 宣言構文による Web ページでのデータのフィルター処理

QueryExtender コントロールは、データ ソースから取得されたデータに対するフィルターの作成に使用されます。このコントロールを使用すると、データ ソース内で明示的なクエリを作成する必要がありません。 QueryExtender コントロールには、次の利点があります。

  • Where 句を作成するよりも詳細にフィルター処理を表現できます。

  • LinqDataSource コントロール、EntityDataSource コントロール、およびサードパーティのデータ ソースに対して共通のクエリ言語を使用できるようにします。 たとえば、QueryExtender をこれらのデータ ソース コントロールと共に使用すると、モデル固有の Where 句や eSQL ステートメントを作成しなくても、Web ページの検索機能を実現できます。

  • 個別でも組み合わせても使用できるさまざまなフィルター処理オプションをサポートしています。

QueryExtender コントロールを Web ページのマークアップで使用すると、宣言構文のみを使用してデータをフィルター処理できます。

このチュートリアルでは、AdventureWorks サンプル データベースの Product テーブルから値を選択して、データをフィルター処理する方法を説明します。

このチュートリアルでは、次の作業について説明します。

  • データ ドリブン ASP.NET Web サイトを作成する。

  • Visual Studio 2010 または Visual Web Developer 2010 Express を使用して、データを Web サイトに追加する。

  • LinqDataSource コントロールを使用してデータにアクセスする。

  • フィルター オプションを使用して、選択したレコードのみを表示するフィルター付きのクエリを作成する。

  • GridView コントロールでデータを表示する。

必須コンポーネント

このチュートリアルを完了するための要件は次のとおりです。

  • Visual Studio 2010 または Visual Web Developer 2010 Express。

  • SQL Server Express。 SQL Server がインストールされている場合、SQL Server も使用できますが、いくつかの手順を微調整する必要があります。

  • AdventureWorks サンプル データベース。 このチュートリアルでは、データベース ファイルを Web サイトに追加し、.mdf ファイルに接続します。 Visual Studio でデータベースに接続する方法については、「方法: .MDF ファイルを使用して AdventureWorksLT データベースに接続する」を参照してください。 また、AdventureWorks サンプル データベースをダウンロードし、Visual Studio に接続することも可能です。 AdventureWorks サンプル データベースをインストールし、このデータベースへの接続を Visual Studio で作成する方法については、「方法: ASP.NET 開発用に AdventureWorksLT サンプル データベースを設定する」を参照してください。

ASP.NET Web サイトの作成

最初に、Web サイトを作成します。 ASP.NET Web サイトを既に作成している場合は、そのサイトをこのチュートリアルで使用できます。

このチュートリアルでは、Web サイト プロジェクトを使用します。 代わりに、Web アプリケーション プロジェクトを使用することもできます。 これらの Web プロジェクトの種類の違いについては、「Web アプリケーション プロジェクトと Web サイト プロジェクト」を参照してください。

ASP.NET Web サイトを作成するには

  1. Visual Web Developer または Visual Studio を起動します。

  2. [ファイル] メニューの [新しい Web サイト] をクリックします。 (このオプションが表示されない場合は、[新規作成] をクリックし、[Web サイト] をクリックします)。

    [新しい Web サイト] ダイアログ ボックスが表示されます。

  3. [インストールされたテンプレート][Visual Basic] または [Visual C#] をクリックし、[ASP.NET Web サイト] をクリックします。

  4. [Web の場所] ボックスで、[ファイル システム] をクリックし、Web サイトのページを格納するフォルダーの名前を入力します。 たとえば、フォルダー名として「C:\Websites\FilterDemo」と入力します。

  5. [OK] をクリックします。

    Visual Studio によって、レイアウト (マスター ページ、Default.aspx および About.aspx コンテンツ ページ、カスケード スタイル シート)、Ajax (クライアント スクリプト ファイル)、および認証 (ASP.NET メンバーシップ) のためのビルド済みの機能を含む Web プロジェクトが作成されます。

    このチュートリアルでは、Default.aspx ページは使用しません。 代わりに、マスター ページを使用しない新しいページを作成します。

  6. Default.aspx ページを閉じます。

  7. Web サイトのルート フォルダーを右クリックし、[新しい項目の追加] をクリックします。

  8. [インストールされたテンプレート][Web フォーム] をクリックし、[追加] をクリックします。

    Visual Studio によって Default2.aspx という新しいページが作成されます。

  9. 既定の名前を「FilterDemo.aspx」に変更し、[追加] をクリックします。

  10. ページを保存します。

Web サイトへのデータの追加

ここでは、作成した Web サイトに AdventureWorks サンプル データベースを追加します。 Web サイトが AdventureWorks データベースに既に接続されている場合は、この手順を実行する必要はありません。

データベース ファイルをプロジェクトに追加するには

  • AdventureWorks.mdf サンプル データベース ファイルを Web サイトに追加し、このデータベースへの接続を Visual Studio で作成します。

    AdventureWorks サンプル データベースをインストールし、このデータベースへの接続を Visual Studio で作成する方法については、「方法: .MDF ファイルを使用して AdventureWorksLT データベースに接続する」を参照してください。

    注意

    サンプル データベース ファイルの AdventureWorks.mdf と AdventureWorksLT.mdf をインストールする手順はほとんど同じです。インストールするときに、AdventureWorksLT ではなく、AdventureWorks サンプル データベースを選択します。

次に、データ モデルを作成します。 LINQ to SQL データ モデルまたはエンティティ データ モデルを使用できますが、 このチュートリアルでは、LINQ to SQL データ モデルを使用します。

LINQ to SQL を使用してデータ モデルを作成するには

  1. ソリューション エクスプローラーで、Web サイトを右クリックし、[追加] をクリックして、[新しい項目] をクリックします。

  2. [インストールされたテンプレート][データ] をクリックし、[LINQ to SQL クラス] をクリックします。

  3. [名前] ボックスに、データベース モデルの名前を入力します。 たとえば、「AdventureWorks.dbml」という名前を入力し、[追加] をクリックします。

    注意

    App_Code フォルダーを作成するかどうかを確認するメッセージが表示されたら、[はい] をクリックします。

    [オブジェクト リレーショナル デザイナー] が表示されます。

  4. デザイン サーフェイスで、"サーバー エクスプローラー" リンクをクリックします。

  5. サーバー エクスプローラーで、AdventureWorks データベースを展開し、"テーブル" ノードを展開して、Product テーブルをデザイナー ウィンドウにドラッグします。

    テーブルとその列が、デザイナー ウィンドウにエンティティとして表示されます。

  6. .dbml ファイルを保存して閉じます。

  7. [ビルド] メニューの [ビルド] をクリックします。

データ ソース コントロールの追加

次の手順では、データ ソース コントロールを Web ページに追加し、データベースと連動するように構成します。 フィルター処理を実行できるようにする QueryExtender コントロールは、LinqDataSource コントロールと EntityDataSource コントロールをサポートしています。 このチュートリアルでは LinqDataSource を使用します。

データ ソース コントロールを追加するには

  1. 前に作成した FilterDemo.aspx ページに切り替えるか、このページを開きます。

  2. デザイン ビューに切り替えます。

  3. ツールボックスの [データ] タブから、LinqDataSource コントロールをページにドラッグします。

  4. LinqDataSource コントロールのスマート タグ メニューパネルの [データ ソースの構成] をクリックします。

  5. [DataContext オブジェクトのみを表示する] をクリックします。

  6. [コンテキスト オブジェクトの選択] で AdventureWorksDataContext を選択し、[次へ] をクリックします。

  7. [テーブル][製品 (テーブル<製品>)] をクリックします。

  8. [GroupBy][なし] をクリックします。

  9. [選択] で、すべての列を選択し、[完了] をクリックします。

    注意

    すべての列を選択するには、[*] チェック ボックスをオンにします。テーブルおよび列にデータが格納されるようにするには、データ モデルの作成後に Web アプリケーションを構築する必要があります。

  10. プロパティ ウィンドウで、次の 2 つのプロパティが設定されていることを確認します。

    • ContextTypeName プロパティが AdventureWorksDataContext に設定されている。

    • TableName プロパティが "Products" に設定されている。

  11. ソース ビューに切り替えます。

    マークアップは、次の例のようになります。

    <asp:LinqDataSource ID="LinqDataSource1" runat="server"
        ContextTypeName="AdventureWorksDataContext" EntityTypeName=""  
        TableName="Products" >
    </asp:LinqDataSource>
    

宣言構文によるデータのフィルター処理

ここでは、検索機能を Web ページに追加します。 このために、ユーザー入力を受け取るコントロールを追加します。 また、QueryExtender コントロールを使用し、そのフィルター オプションをユーザー入力に基づいて設定します。 これを QueryExtender コントロールを使用して行うには、宣言構文を使用します。 このチュートリアルでは、次のフィルター オプションを使用して検索機能を Web サイトに追加します。

  • SearchExpression - 指定した文字列値に一致する製品名を検索するために使用します。

  • RangeExpression - ReorderPoint 列の値が指定範囲内にある製品を検索するために使用します。

  • PropertyExpression - 完成品として分類される製品を検索するために使用します。

  • CustomExpression - ユーザー定義の LINQ クエリを実行するために使用します。

フィルター処理されたデータの結果は、GridView コントロールで表示されます。

フィルター処理コントロールを追加するには

  1. ソース ビューに切り替えます。

  2. body タグ内の LinqDataSource コントロールの終了タグの後ろで、次のマークアップをページに追加します。

    <asp:QueryExtender runat="server" TargetControlID="LinqDataSource1">
    </asp:QueryExtender>
    

    これにより、QueryExtender コントロールがページに追加され、それに対応するデータ ソース コントロールが、前に追加した LinqDataSource コントロールになるように設定されます。

    注意

    ツールボックスから QueryExtende コントロールをドラッグしてページに追加することもできます。ただし、コントロールは、デザイナーでのデータ ソースまたは式の追加はサポートしません。

文字列の検索

次は、SearchExpression オブジェクトを追加し、テキスト ボックスの値を使用して "前方一致" 検索を実行するようにこのオブジェクトを構成します。

文字列を検索するには

  1. ツールボックスの "標準" ノードから TextBox コントロールをページにドラッグします。

  2. TextBox の開始タグの前に、キャプションとして「検索:」を入力します。

  3. ID プロパティを SearchTextBox に設定します。

    テキスト ボックス コントロールのマークアップは、次の例のようになります。

    Search: <asp:TextBox ID="SearchTextBox" runat="server" />
    
  4. QueryExtender コントロールの開始タグと終了タグの間に、次の SearchExpression フィルターを追加します。

    <asp:SearchExpression SearchType="StartsWith" DataFields="Name">
      <asp:ControlParameter ControlID="SearchTextBox" />
    </asp:SearchExpression>
    

    この検索式は、SearchTextBox コントロールに入力された文字列で始まる製品を "Name" 列から検索します。

  5. ツールボックスから、Button コントロールをページにドラッグし、Text プロパティを Search に設定します。

    ボタンのマークアップは、次の例のようになります。

    <asp:Button ID="Button1" runat="server" Text="Search" />
    
  6. ツールボックスから、GridView コントロールをページにドラッグし、そのプロパティを次の例のとおりに設定します。

    <asp:GridView ID="GridView1" runat="server"  
        DataSourceID="LinqDataSource1"   
        DataKeyNames="ProductID"  AllowPaging="True">
    </asp:GridView>
    

    検索結果は、GridView コントロールで表示されます。

検索フィルターのテスト

ここで、作成した検索フィルターをテストできます。

検索フィルターをテストするには

  1. Ctrl キーを押しながら F5 キーを押してページを実行します。

  2. 検索テキスト ボックスに文字列を入力し、[検索] をクリックします。

    たとえば、「Ch」と入力して [検索] をクリックします。 GridView コントロールで表示される結果には、"Ch" で始まる製品名のみが含まれています。

    注意

    LINQ データ プロバイダーは大文字と小文字を区別しません。ただし、ComparisonType プロパティをサポートするデータ プロバイダーを使用すると、大文字と小文字を区別するように変更できます。

  3. ブラウザーを閉じます。

一定範囲の値の検索

次は、RangeExpression オブジェクトを追加して、2 つのテキスト ボックスの値で指定された範囲内に ReorderPoint がある製品を ReorderPoint 列から検索します。

範囲を検索するには

  1. ソース ビューに切り替えます。

  2. ツールボックスから、2 つの TextBox コントロールをページにドラッグします。 このテキスト ボックスは検索テキスト ボックスの下に配置します。

    このテキスト ボックスを使用して、範囲の開始位置と終了位置を指定します。

  3. 最初の TextBox コントロールの開始タグの前に「開始:」と入力し、2 番目の TextBox コントロールの開始タグの前に「終了:」と入力します。

  4. 最初のテキスト ボックスの ID を FromTextBox に設定し、2 番目のテキスト ボックスの ID を ToTextBox に設定します。

    テキスト ボックス コントロールのマークアップは、次の例のようになります。

    From: <asp:TextBox ID="FromTextBox" runat="server" ></asp:TextBox>
    To: <asp:TextBox ID="ToTextBox" runat="server" ></asp:TextBox>
    
  5. QueryExtender コントロールの開始タグと終了タグの間に、次の RangeExpression フィルターを追加します。

    <asp:RangeExpression DataField="ReorderPoint" MinType="Inclusive"  
        MaxType="Inclusive">
    </asp:RangeExpression>
    

    これにより、ReorderPoint 列が検索されるほか、テキスト ボックスで指定する値が検索条件に含まれます。

  6. RangeExpression フィルターの開始タグと終了タグの間に、次のマークアップを追加します。

    <asp:ControlParameter ControlID="FromTextBox" />
    <asp:ControlParameter ControlID="ToTextBox" />
    

    これにより、フィルターにパラメーター値を指定するようにテキスト ボックスが構成されます。 RangeExpression フィルターの最終的なマークアップは、次の例のようになります。

    <asp:RangeExpression DataField="ReorderPoint" MinType="Inclusive"  
        MaxType="Inclusive">
      <asp:ControlParameter ControlID="FromTextBox"/>
      <asp:ControlParameter ControlID="ToTextBox"/>
    </asp:RangeExpression>
    

範囲フィルターのテスト

ここで、作成した範囲フィルターをテストできます。

範囲フィルターをテストするには

  1. Ctrl キーを押しながら F5 キーを押してページを実行します。

  2. [開始] ボックスと [終了] ボックスに値を入力し、[検索] をクリックします。

    たとえば、300 から 400 までの範囲を入力し、[検索] ボタンをクリックします。 返されるデータには、再発注点が 300 から 400 までの製品の名前が含まれています。 GridView コントロールで表示される結果には、Reorder の値が 300 から 400 までの製品名のみが含まれています。

  3. ブラウザーを閉じます。

Boolean 値に基づいた検索

次は、PropertyExpression オブジェクトを追加し、Boolean 値に基づいてデータをフィルター処理するようにこのオブジェクトを構成します。 Boolean 値の指定はチェック ボックス コントロールで行います。

Boolean 値に基づいて検索を実行するには

  1. ツールボックスから、CheckBox コントロールをページにドラッグし、ID プロパティを MakeCheckBox に設定します。 このチェック ボックスは、前に追加したテキスト ボックスの下に配置します。

  2. CheckBox コントロールの開始タグの前に、チェック ボックスのキャプションとして「Make More」と入力します。

    マークアップは、次の例のようになります。

    Make More: <asp:CheckBox ID="MakeCheckBox" runat="server" />
    
  3. 範囲式の下にある QueryExtender コントロールの開始タグと終了タグの間に次のマークアップを追加します。

    <asp:PropertyExpression></asp:PropertyExpression>
    

    これにより、プロパティ式のフィルター オプションがページに追加されます。

  4. PropertyExpression フィルターの開始タグと終了タグの間に ControlParameter コントロールを追加します。

  5. このコントロールの ControlParameter パラメーターの ID を MakeCheckBox に設定します。

  6. ControlParameter パラメーターの Name プロパティを、フィルター処理の基準となる列である MakeFlag に設定します。

    マークアップは、次のようになります。

    <asp:PropertyExpression>
        <asp:ControlParameter ControlID="MakeCheckBox" Name="MakeFlag" />
    </asp:PropertyExpression>
    

Boolean フィルターのテスト

ここで、作成した Boolean フィルターをテストできます。

Boolean フィルターをテストするには

  1. Ctrl キーを押しながら F5 キーを押してページを実行します。

  2. [追加] チェック ボックスをオンにし、[検索] をクリックします。

    返されるデータには、MakeFlag 列の値が true に設定された (この列がオンになっている) 製品の名前のみが含まれます。

  3. ブラウザーを閉じます。

複数のフィルターの使用

一度に複数のフィルターを使用できます。 複数のフィルターを使用すると、そのフィルターに使用される AND 句がクエリで生成されます。 ここでは、一度にすべてのフィルターをテストします。

複数のフィルターをテストするには

  1. Ctrl キーを押しながら F5 キーを押してページを実行します。

  2. [検索] ボックスに、「Ch」と入力します。

  3. [追加] チェック ボックスをオンにします。

  4. [開始] ボックスに「500」と入力します。

  5. [終了] ボックスに「1000」と入力します。

  6. [検索] をクリックします。

    返されるデータに含まれるのは、名前が "Ch" で始まり、Makeflag 列がオンになっており、ReorderPoint 値が 500 から 1000 までの製品の名前です。

カスタム クエリによるデータのフィルター処理

ここでは、カスタム LINQ クエリを使用してデータをフィルター処理します。 このために、次の操作を実行します。

  • カスタム LINQ クエリをページのクラス ファイルで作成する。

  • データ ソース コントロールと QueryExtender コントロールをページに追加する。

  • カスタム LINQ クエリを実行するためのカスタム式を QueryExtender コントロールに追加する。

  • クエリの結果を表示するための GridView コントロールを追加する。

このクエリは、CustomExpression フィルターまたは MethodExpression フィルターを使用して実行します。 これらのフィルターの動作はほとんど同じです。 このチュートリアルでは CustomExpression フィルターを使用します。 メソッド式のフィルターの使用方法については、「MethodExpression」を参照してください。

注意

CustomExpression フィルターまたは MethodExpression フィルターは、他のフィルター オプションと同じページで使用する場合、QueryExtender コントロールで実行する最初のフィルターでなければなりません。

次の手順では、カスタム LINQ クエリを作成します。

カスタム LINQ クエリを作成するには

  1. ソリューション エクスプローラーで、Web アプリケーションを右クリックし、[追加] をクリックして、[新しい項目] をクリックします。

  2. [インストールされたテンプレート][Web] をクリックし、[Web フォーム] をクリックします。 ページには、既定の名前を使用できます。

  3. [別のファイルにコードを書き込む] チェック ボックスをオンにし、[追加] をクリックします。

  4. ソリューション エクスプローラーで、先ほど作成したページを右クリックし、[コードの表示] をクリックします。

  5. using ディレクティブ (C#) または Imports ディレクティブ (Visual Basic) を使用して次の名前空間を追加します。

    Imports System.Web.UI.WebControls.Expressions
    Imports System.Data.Linq
    
    using System.Web.UI.WebControls.Expressions;
    using System.Linq;
    
  6. 次のメソッドをクラスに追加します。

    Protected Sub FilterProducts(ByVal sender As Object, ByVal e As CustomExpressionEventArgs)
            e.Query = From p In e.Query.Cast(Of Product)() _
                      Where p.ListPrice >= 3500 _
                      Select p
        End Sub
    
    protected void FilterProducts(object sender, CustomExpressionEventArgs e)
    {
            e.Query = from p in e.Query.Cast<Product>()
                      where p.ListPrice >= 3500
                      select p;
    }
    

    このクエリでは、表示価格が 3500 以上の製品を ListPrice 列から検索します。

次の手順では、このデータ ソース コントロールをページに追加し、データ モデルと連動するように構成します。 このチュートリアルでは LinqDataSource を使用します。

データ ソース コントロールを追加するには

  1. デザイン ビューに切り替えます。

  2. ツールボックスで "データ" を展開し、LinqDataSource コントロールをページにドラッグします。

  3. スマート タグをクリックし、[データ ソースの構成] をクリックします。

  4. [DataContext オブジェクトのみを表示する] をクリックします。

  5. [コンテキスト オブジェクトの選択] で AdventureWorksDataContext を選択し、[次へ] をクリックします。

  6. [テーブル][製品 (テーブル<製品>)] をクリックします。

  7. [GroupBy][なし] をクリックします。

  8. [選択] で、すべての列を選択し、[完了] をクリックします。

    注意

    すべての列を選択するには、[*] チェック ボックスをオンにします。

  9. プロパティ ウィンドウで、ContextTypeName プロパティを AdventureWorksDataContext に設定します。

  10. プロパティ ウィンドウで、TableName プロパティを "Products" に設定します。

  11. ソース ビューに切り替えます。

    マークアップは、次の例のようになります。

    <asp:LinqDataSource ID="LinqDataSource1" runat="server"
        ContextTypeName="AdventureWorksDataContext" EntityTypeName=""  
        TableName="Products" >
    </asp:LinqDataSource>
    

カスタム フィルターの実行

ここでは、カスタム クエリを実行できるようにするフィルター処理コントロールを追加します。

フィルター処理コントロールを追加するには

  1. ソース ビューに切り替えます。

  2. body 要素の LinqDataSource コントロールの終了タグの後ろで、次のマークアップをページに追加します。

    <asp:QueryExtender runat="server" TargetControlID="LinqDataSource1">
    </asp:QueryExtender>
    

    これにより、QueryExtender コントロールがページに追加され、それに対応するデータ ソース コントロールが、前に追加した LinqDataSource コントロールになるように設定されます。

  3. QueryExtender コントロールの開始タグと終了タグの間に CustomExpression フィルターを追加し、その OnQuerying 属性を FilterProducts に設定します。

    マークアップは、次のようになります。

    <asp:CustomExpression OnQuerying="FilterProducts"></asp:CustomExpression>
    
  4. ツールボックスから、GridView コントロールをページにドラッグし、そのプロパティを次の例のとおりに設定します。

    <asp:GridView ID="GridView1" runat="server"  
        DataSourceID="LinqDataSource1"   
        DataKeyNames="ProductID"  AllowPaging="True">
    </asp:GridView>
    

    フィルター処理されたデータの結果は、GridView コントロールで表示されます。

カスタム フィルターのテスト

ここで、カスタム フィルターをテストできます。

Web サイトをテストするには

  • Ctrl キーを押しながら F5 キーを押してページを実行します。

    返されるデータには、表示価格が 3500 以上の製品のみが含まれます。

コード例

このチュートリアルを完了すると、作成したページのマークアップは次の例のようになります (この例は、DOCTYPE 宣言の後のマークアップのみを示しています)。

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Filter Demo</title>
</head>
<body>
    <form id="form1" runat="server">
    Search:<asp:TextBox ID="SearchTextBox" runat="server" />
    <p>

        Make More:<asp:CheckBox ID="MakeCheckBox" runat="server" />
    <p>
        From:<asp:TextBox ID="FromTextBox" runat="server" ></asp:TextBox>
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        To:<asp:TextBox ID="ToTextBox" runat="server" ></asp:TextBox>
    </p>
    <p>
    <asp:Button ID="Button1" runat="server" Text="Search" />
    </p>
    <asp:LinqDataSource ID="LinqDataSource1"  
        ContextTypeName="FilterDemo.AdventureWorksDataContext"  
        TableName="Products" runat="server"> 
    </asp:LinqDataSource>
    <asp:QueryExtender runat="server" TargetControlID="LinqDataSource1">

    <asp:SearchExpression SearchType="StartsWith" DataFields="Name" >
    <asp:ControlParameter ControlID="SearchTextBox" />
    </asp:SearchExpression>

    <asp:RangeExpression DataField="ReorderPoint" MinType="Inclusive" MaxType="Inclusive">
    <asp:ControlParameter  ControlID="FromTextBox" />
    <asp:ControlParameter  ControlID="ToTextBox" />
    </asp:RangeExpression>

<asp:PropertyExpression>
    <asp:ControlParameter ControlID="MakeCheckBox" Name="MakeFlag" />
    </asp:PropertyExpression>
    </asp:QueryExtender>

<asp:GridView ID="GridView1" runat="server"  
     DataSourceID="LinqDataSource1" AllowPaging="True"    
     DataKeyNames="ProductID>
</asp:GridView>
    </form>

    </body>
    </html>

このチュートリアルを完了すると、カスタム フィルター ページのマークアップは次の例のようになります (この例は、DOCTYPE 宣言の後のマークアップのみを示しています)。

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Custom Filter</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>

    </div>
    <asp:LinqDataSource ID="LinqDataSource1" runat="server" 
        ContextTypeName="AdventureWorksDataContext" EntityTypeName="" 
        TableName="Products">
    </asp:LinqDataSource>

    <asp:QueryExtender ID="QueryExtender1" runat="server" TargetControlID="LinqDataSource1">
        <asp:CustomExpression OnQuerying="FilterProducts"></asp:CustomExpression>
    </asp:QueryExtender>

    <asp:GridView ID="GridView1" runat="server"  
        DataSourceID="LinqDataSource1"   
        DataKeyNames="ProductID"  AllowPaging="True">
    </asp:GridView>
    </form>
</body>
</html>

このチュートリアルを完了すると、ページのクラス ファイルのカスタム LINQ クエリのコードは次の例のようになります

Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Web.UI.WebControls.Expressions
Imports System.Data.Linq

Partial Class CustomVB
    Inherits System.Web.UI.Page

    Protected Sub FilterProducts(ByVal sender As Object, ByVal e As CustomExpressionEventArgs)
        e.Query = From p In e.Query.Cast(Of Product)() _
            Where p.ListPrice >= 3500 _
            Select p
    End Sub




using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.Expressions;
using System.Linq;

public partial class _Default : System.Web.UI.Page 
{
    protected void FilterProducts(object sender, CustomExpressionEventArgs e)
    {
        e.Query = from p in e.Query.Cast<Product>()
                  where p.ListPrice >= 3500
                  select p;
    }
}

次の手順

このチュートリアルでは、宣言構文でデータをフィルター処理するために、QueryExtender コントロールを使用しました。 QueryExtender コントロールには、このチュートリアルで説明されていないフィルター オプションもあります。 次のような作業を行ってみることができます。

  • OrderByExpression フィルターおよび ThenBy フィルターを Web ページに追加して、データを並べ替える。

  • MethodExpression フィルターを使用してカスタム フィルターを作成する。 詳細については、「MethodExpression」を参照してください。

    注意

    QueryExtender コントロールには、フィルター処理を追加するために ASP.NET 動的データ Web サイトで使用できる DynamicFilter コントロールと ControlFilterExpression コントロールがあります。これらのフィルターは、ASP.NET 動的データ Web サイトでのみサポートされます。詳細については、「QueryExtender」を参照してください。

参照

参照

QueryExtender