SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Visual Studio 2008徹底入門(AD)

とことん理解する .NET Framework 3.5

Visual Studio 2008 徹底入門(3)

  • このエントリーをはてなブックマークに追加

LINQ

 さて、型推論、オブジェクト初期化子、匿名型、拡張メソッド、ラムダ式と、Visual BasicとC#の新しい言語機能について説明してきました。これらは単独でも利用できる強力な機能ですが、これらの機能をすべて利用して記述されるのがLINQ(Language Integrated Query:統合言語クエリ)と言われる機能です。

 通常、プログラミングをしている際には、オブジェクトや配列、データベース、DataSet、XMLなどさまざまな情報にアクセスする必要があります。従来は、アクセス対象に合わせてプログラミングをしていましたが、LINQを利用することで同じようなプログラミング方法で、異なる情報にアクセスできるようになります。

 LINQを利用する場合には大雑把に以下の3つの手順を踏みます。

  1. アクセス対象のデータソースの用意
  2. データソースに対する抽出処理
  3. 抽出データの利用

 アクセス対象のデータソースとしては、ArrayListなどのコレクション系オブジェクトや配列、SQL Serverデータベース、Xmlドキュメント、DataSetなどが利用可能です。これらのアクセス対象には、抽出処理をデータソースに対する処理に変換するLINQプロバイダというものが予め用意されているということでもあります。つまり、独自にLINQプロバイダを作成することで、どのようなデータソースに対してもLINQ技術を利用できるということになります。

 次に、データソースに対する抽出処理です。抽出処理は一般的にクエリ式というものを使って記述されます。仮にcustomersという名前のデータソースが用意されている場合、抽出処理は次のように記述できます。

LINQの例(VB.NET)
Dim query = From cust In customers _
            Where cust.City = "London" _
            Order By cust.Name Ascending _
            Select Name = cust.Name, Phone = cust.Phone
LINQの例(C#)
var query = from cust in customers
            where cust.City == "London"
            orderby cust.Name ascending
            select new { Name = cust.Name, Phone = cust.Phone };

 SQL文をご存じの場合には、順番こそ異なるものの見慣れた構文ではないかと思います。これがLINQで利用されるクエリ式と言われるものです。しかし、これはクエリ式を利用してこのようにも記述できるというだけで、実態としては次のようなコードを記述しているのと同義です。

LINQをクエリ式で書かない例(VB.NET)
Dim query = customers _
            .Where(Function(cust) cust.City = "London") _
            .OrderBy(Function(cust) cust.Name) _
            .Select(Function(cust) New With { _
            .Name = cust.Name, Phone = cust.Phone })
LINQをクエリ式で書かない例(C#)
var query = customers
            .Where(cust => cust.City == "London")
            .OrderBy(cust => cust.Name)
            .Select(cust => new { Name = cust.Name, 
                                  Phone = cust.Phone });

 ここでの、WhereOrderByなどのメソッドはコレクション系クラスなどに対する拡張メソッドです(正確にはIEnumerable(T)インターフェースに対する拡張メソッド)。このように書き直してみると、型推論、オブジェクト初期化子、匿名型、拡張メソッド、ラムダ式のすべてを総動員している集大成の技術であることがご理解いただけるかと思います。ただ、このようなさまざまな機能を利用して書いていたのでは大変なのでこれを簡略化するためにクエリ式という新しい機能を利用して、記述を簡単にしているということになります。

 最後に抽出されたデータはFor Each構文などを利用したり、WindowsフォームのDataGridViewやASP.NETのGridViewなどにそのまま利用したりといったことができます。特にASP.NETには新しいDataSourceコントロールとしてLinqDataSourceコントロールというものも用意されているので、データバインド機能の中に簡単に組み込むことができます。

まとめ

 今回は.NET Framework 3.5の新機能をいろいろな点から紹介しました。全体像や前バージョンとの互換性に関する注意点を見ることで新しい.NET Frameworkが位置するところをご理解いただけたでしょうか。クラスライブラリとして、言語そのものとして、さまざまな新機能が追加されていることがわかるかと思います。

 また、今回は細かい詳細の動作は説明できませんでしたが、LINQという大きな技術についてこれを支えている言語機能という点から紐解いて説明しました。少しとっつきにくいと思われる大型テクノロジーを理解する糸口になれば幸いです。

 次回はクライアントサイドを中心とした.NET 3.5世代のASP.NETとWebテクノロジについて解説する予定です。どうぞお楽しみに。

参考資料

  1. Visual Studio 2008 Professional Edition
  2. MSDN ライブラリ
修正履歴

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
Visual Studio 2008徹底入門連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、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本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト りばてぃ/FUJIKO/ナオキ(リバティ, フジコ, ナオキ)

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/2269 2008/04/09 16:26

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング