Visual Studio 2008で進化するASP.NET 3.5の開発手法(後篇)
VS 2008を利用したASP.NET 3.5の開発方法を学習する 3
ダウンロード サンプルファイル (15.2 KB)
LINQ対応
ここまでに何度か述べてきたように、.NET Framework 3.5からLINQと呼ばれる技術が登場します。
LINQとは、Language Integrated Query(統合言語クエリ)の略で、.NET Frameworkに新たに追加された革新的な言語埋め込みクエリ技術です。具体的に言うと、リレーショナルデータベースやXML、オブジェクトなど、さまざまなデータに対して同一形式のクエリ処理を記述することができます(図28)。VS 2008を利用して開発を行う際、さまざまな場面でLINQのクエリ式は使用されることになるかと思います。本項ではLINQ to SQLを使ったSQL Serverに対するLINQのコーディング部分に焦点を絞って紹介します。
ページにLINQのクエリ式を記述する
前述したLINQ to SQLを利用するもう1つの方法は、ページにLINQのクエリを記述することです。LINQ to SQLクラスでDataContextオブジェクトを生成した後、コードビハインドのファイルにLINQを利用してクエリを直接記述することで、データソースコントロールを介することなく、データ表示ができます(図29)。
DataSourceコントロールを使用せずに、GridViewコントロールのみでデータ表示できるのは、LINQクエリがIEnumerableインターフェイスか、それを継承したインターフェイスを実装した結果を返すからです。
IEnumerableインターフェイスは、コレクションに対して反復処理を行う列挙子を利用できるようにします。 IEnumerableインターフェイスは、ASP.NETサーバーコントロールがオブジェクトをデータバインドする時のインターフェイスでもあります。つまり、LINQ to SQLに限らず、LINQ to XMLやLINQ to Objectsの結果でもASP.NETのサーバーコントロールにデータバインドできます。
肝心のクエリについてですが、LINQ to SQLを利用した場合には最初にDataContextオブジェクトを生成する必要があります。また、DataContextオブジェクトを生成した後、テーブルの値を受け取る際に名前付きの型を利用することはほとんどないと考えられるため、LINQの値を受け取る型は匿名型を利用します (サンプルソースの「LINQSampleVB1(CS1).aspx」)。
LINQを利用する場合、クエリ式を利用することで、SQLライクな構文をプログラムの中に直接記述できます。また、クエリ式の特徴としてSelect句かGroup句の記述により処理が終了します。そのためFrom句が最初に、Select句が最後に記述されます。他にもC# 3.0の追加機能であるラムダ式や匿名メソッドなどがLINQの技術を支えます。詳しい技術情報はこちらの記事に書かれているので参照ください。本稿ではLINQのクエリ式の記述について理解いただければと思います。
下記のlist変数には「SELECT price,title,pubdate FROM titles WHERE type="trad_cook"」と同義のクエリを記述しています。
Protected Sub Page_Load(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles Me.Load 'DataContextオブジェクトの生成 Dim db As New DataClassesDataContext() 'titlesテーブルにアクセスしtypeがtrad_cookである 'price,title,pubdateの列を取得 Dim list = From t In db.titles _ Where t.type = "trad_cook" _ Select New With { _ t.price, _ t.title, _ t.pubdate _ } 'LINQのクエリによりデータを取得したlist変数は 'IEnumerableインターフェイスを実装するため、 'ASP.NETコントロールに直接参照させる事ができる GridView1.DataSource = list GridView1.DataBind() End Sub
protected void Page_Load(object sender, EventArgs e) { DataClassesDataContext db = new DataClassesDataContext(); var list = from t in db.titles where t.type == "trad_cook" select new { t.price, t.title, t.pubdate, }; GridView1.DataSource=list; GridView1.DataBind(); }
LINQによるテーブル結合(同一データベース内のみ)
LINQ to SQLでは同一のデータベース内のみですが、テーブル結合もできます(サンプルソースの「LINQSampleVB2(CS2).aspx」)。ただし、これが行えるのはページにLINQのクエリを記述する場合のみです。
テーブル結合のポイントはLINQ to SQLデザイナ画面に結合したいテーブルを配置することと、クエリの記述時にJoin句をつけ加えるだけです。結合による実際のLINQ実行結果は図30のようになります。
下記のlist変数には「SELECT titles.price,titles.title,titles.pubdate,sales.ord_date FROM titles INNER JOIN sales ON titles.title_id EQUALS sales.title_id WHERE type="trad_cook"」と同義のクエリが記述されます。
Protected Sub Page_Load(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles Me.Load Dim db As New DataClassesDataContext() 'titlesテーブルとsalesテーブルを結合し、 'typeがtrad_cookである 'price,title,pubdateの列を取得 Dim list = From t In db.titles _ Where t.type = "trad_cook" _ Join s In db.sales _ On t.title_id Equals s.title_id _ Select New With { _ t.price, _ t.title, _ t.pubdate, _ s.ord_date _ } GridView1.DataSource = list GridView1.DataBind() End Sub
protected void Page_Load(object sender, EventArgs e) { DataClassesDataContext db = new DataClassesDataContext(); var list = from t in db.titles where t.type == "trad_cook" join s in db.sales on t.title_id equals s.title_id select new { t.price, t.title, t.pubdate, s.ord_date }; GridView1.DataSource=list; GridView1.DataBind(); }
まとめ
以上、3回に渡ってVS 2008の新機能を紹介してきましたが、すべての機能は紹介しきれていません。特にLINQの技術、ASP.NET AJAXの技術については知らなくてはならない知識も大量にあります。本稿が事前の予習になれば幸いです。
また、MSDNサブスクリプションを利用していない方はVS 2008のパッケージを購入するのはまだ先になるかと思いますが、VWD 2008は無償でダウンロードできます。ぜひこちらをダウンロードして実際にVS 2008に触れてみてください。
参考資料
この記事は参考になりましたか?
既に会員の方はを行ってください。
- VS 2008を利用したASP.NET 3.5の開発方法を学習する連載記事一覧
-
- Visual Studio 2008で進化するASP.NET 3.5の開発手法(後篇)
- Visual Studio 2008で進化するASP.NET 3.5の開発手法(中篇)
- Visual Studio 2008で進化するASP.NET 3.5の開発手法(前篇)
- この記事の著者
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
WINGSプロジェクト ナオキ(ナオキ)
<WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書、記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア




