ジョイ・オブ・プログラミング:LINQ(前編)XMLを扱えるLINQ ―LINQ to XML― の基礎を学ぼうシグマコンサルティング 菅原 英治2008/04/18 |
|
|
■サンプル・アプリケーションについて
まずはわたしが作成したサンプル・アプリケーションについて簡単に説明します。今回作成したのは、記録したレストラン情報を検索できるレストラン検索アプリケーションです。
わたしは、食べ歩きが趣味です。食べ歩いたレストラン情報を記録し、検索したいという思いから、このアプリケーションを思いつきました。
●サンプル・アプリケーションを動かそう
それでは、わたしが作成したアプリケーションを見てみましょう。こちらからアプリケーションをダウンロードし、任意のフォルダに解凍してください。その後、JoyOfLinq.exeを実行してください(※実行には、.NET Framework 3.5の動作環境が必要)。下の図のような画面が表示されます。
また、このアプリケーションのソース・コードは、こちらからダウンロードできます。
起動したサンプル・アプリケーションの画面 | ||||||||||||||||||
JoyOfLinq.exeを実行しているところ。 | ||||||||||||||||||
|
画面が表示されたら、どのテキストボックスにも値を入力しないで、[検索]ボタンを押してみてください。全レストランの一覧が表示されます。続いて、Idを入力するテキストボックスに半角数字で「3」と入力してください。Idが「3」に該当する結果が、1件表示されるはずです。そのほかのテキストボックスにも値を入力するなどして、さらに動作を確認してください。
各テキストボックスに入力した条件は、AND条件となっています。例えば、住所を「東京都中」、点数を「70」とすると、住所が「東京都中」で始まり、かつ70点以上のものが検索されます。
サンプル・アプリケーションの動作から、入力された条件を基に検索することができるアプリケーションであることを理解いただけたでしょう。
●サンプル・アプリケーションで利用している技術
サンプル・アプリケーションでは、当然ですが本稿のテーマでもあるLINQを利用しています。またXMLファイルからオブジェクトを生成するためにXmlSerializerも利用しています。さらに、本稿のテーマとは直接関係ないのですが、せっかくVisual Studio 2008を利用するので、画面は最新の描画技術であるWPF(Windows Presentation Foundation)を利用して作成しています。
一方、LINQでXMLを利用する際には、LINQ to XMLを利用するのが標準的な方法です。これは具体的にはSystem.Xml.Linqクラスのことですが、今回のサンプルではこの方法は利用していません。しかしLINQ to XMLの基本的な利用方法は本稿の「LINQの基礎」の中で取り上げます。
■LINQの基礎
ここでは、LINQの基礎について解説します。これは、サンプル・アプリケーションのソース・コードを解説するに当たり、どうしても必要な知識となるからです。ここでは詳細な解説は避け、わたしが重要だと思われる点のみに絞って解説します。
またLINQの詳細から学ばれたい方は、下記の記事とMSDNを参考にするとよいでしょう。
●LINQとは:コレクションを操作する方法
わたしの理解するところ、LINQとはひと言で、「コレクションを操作する方法」といえます。コレクションとは、配列やListジェネリック・クラスなど、オブジェクトの集合を表すものです。また操作とは、その集合に対し射影や選択、並べ替えなどを行うことです。「射影」や「選択」はデータベース用語です。射影とは、あるテーブルから特定の列(カラム)の値をすべて取り出す操作。選択とは、あるテーブルからある条件を満たす行(レコード)を選択的に取り出す操作です。
今回は、LINQにより射影と選択を行う具体例を示します。具体例として記述するコードは、ぜひコンソール・アプリケーションを作成し、実際に試していただきたい。実際に記述することで、より理解が深まります。コンソール・アプリケーションの作成方法については、下記を参考にするとよいでしょう。
○射影の例
それでは、射影の例です。次のリスト1ではstring型の配列で定義した名前一覧から、名前の先頭2文字を射影しその結果を出力します。
|
|
リスト1 先頭2文字を射影する例 | |
ソースのダウンロードはこちらから。 |
リスト1の実行結果は次のようになります。実行結果から、名前の先頭2文字が射影されたことが分かります。
|
|
リスト1の実行結果 |
さて、リスト1にはもう1点重要なポイントがあります。それは太字で示されたIEnumerable<string>の個所です。LINQによるクエリ式の実行結果は、クエリ式の射影(selectの部分)で指定した型のIEnumerableコレクションとなります。
例えば、次のリスト2ではstring型である名前のLengthプロパティを射影しています。Lengthプロパティの値はint型なので、「IEnumerable<int>」の実行結果が返されていることが分かるでしょう。
|
|
リスト2 文字数を射影する例 |
射影の例は以上です。
○選択の例
続いて選択の例です。次のリスト3ではstring型の配列で定義した名前一覧から、文字数が5文字より多いものを選択し、その結果を出力します。
|
|
リスト3 名前の文字数が5文字より多いものを選択する | |
ソースのダウンロードはこちらから。 |
リスト3の実行結果は次のようになります。実行結果から、名前の文字数が5文字より多いものが選択されたことが分かります。
|
|
リスト3の実行結果 |
選択の例は以上です。
以上の例から、わたしがLINQとは「コレクションを操作する方法」、と述べた理由が理解できたでしょうか。また、LINQの実行結果は、IEnumerable型のコレクションである点は重要なポイントです。
INDEX | ||
ジョイ・オブ・プログラミング:LINQ(前編) | ||
XMLを扱えるLINQ ―LINQ to XML― の基礎を学ぼう | ||
1.ジョイ・オブ・プログラミングの伝道師「ロブ」 | ||
2.LINQの基礎 | ||
3.LINQ to XMLについて | ||
ジョイ・オブ・プログラミング:LINQ(後編) | ||
LINQを活用した簡単XMLデータベース・アプリケーション | ||
1.サンプル・アプリケーションのソース解説 | ||
2.LINQのWhere条件を動的に変更する方法 | ||
ジョイ・オブ・プログラミング |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|