連載:[完全版]究極のC#プログラミング

Chapter15 LINQとクエリ式

川俣 晶
2010/03/17
Page 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

15.2 LINQとは何か?

 「LINQ」とはC# 3.0の目玉機能の1つである。日本語では「統合言語クエリ」と書き、「Language-Integrated Query」の略である。その名のとおり、“クエリ”が“言語”に“統合”されるわけである。

 従来、次のように文字列として書いていたクエリは、言語に統合されていたとはいえない。たとえば、クエリの構文が誤っていても、C#コンパイラはそれを検出できないからである。C#コンパイラから見れば、それは単なる文字列だからである。

string query = "SELECT f FROM t";

 そして、このように文字列で記述されたクエリの誤りは、実行時に初めてエラーとして検出されることになる。たとえば実行して数時間後に初めて実行されるクエリであれば、その数時間を待たなければクエリの記述ミスは発見できないことになる。

 しかし、言語にクエリが統合されると、次のようなクエリを記述できる。

var query = from x in t select x.f;

 この場合、selectはC#言語仕様を構成するキーワードなので、つづりを間違えればコンパイラが検出してくれる。実行するまでもなく、コンパイル時にわかるのである。

 いや、それどころか、単純な間違いはVisual StudioのIDEが検出してくれるので、コンパイルという手順すら必要なく、つづりを間違えて打ち終わった瞬間にわかってしまうこともあるだろう。その結果、単純なクエリの書き間違いが、間違った直後に修正されてしまうかもしれない。

 このような機能がもたらす生産性の向上は、絶大である。データベースを扱うプログラマーであれば、積極的にLINQを活用していくべきだろう。

 ……という以上の話はウソではないが、典型的なLINQの誤解の一種といえる。LINQの本質は、データベースのクエリを言語レベルで書けることにはないし(次章の「メソッド構文」を見ればそれがわかる)、実行しなくてもクエリの記述ミスを検出できることにもない(それはそれで有益ではあるが)。

 それよりも、もっと大きな別の「何か」を得るために、LINQは存在しているのである。データベースアプリケーションに浸ったC#プログラマーはもちろんだが、データベースは関係ないと思っているそこの君にも大いに関係がある。なにしろ、本章に出てくるクエリ式のサンプルで、データベースにクエリするものは1つもないぐらいである。


 INDEX
  [完全版]究極のC#プログラミング
  Chapter15 LINQとクエリ式
    1.15.1 LINQの面白さ
  2.15.2 LINQとは何か?
    3.15.3 「値の集まり」に対する演算
    4.15.4 なぜLINQなのか?
    5.15.5 最も基本的なLINQ
    6.15.6 LINQの本質は列挙
    7.15.7 LINQを使ううえでの注意点
    8.15.8 クエリ結果を加工する
    9.15.9 複数のソースからクエリする
    10.15.10 条件で絞り込む
    11.15.11 一部項目のみselectする
    12.15.12 シンプルなソート
    13.15.13 クエリの接続
    14.15.14 クエリ結果のグループ化
    15.15.15 複数ソースを関連付けるjoin句
    16.15.16 from句とjoin句のパフォーマンス
    17.15.17 join句のグループ化結合
    18.15.18 join句の左外部結合
    19.15.19 単独で使うDefaultIfEmptyメソッド
    20.15.20 内部列挙を伴うfrom句の二重使用
    21.15.21 let句
    22.15.22 クエリのインスタンス化
    23.15.23 クエリ結果の個数を得る
    24.15.24 Anyメソッドと存在チェック/【C#olumn】クエリ式のデバッグテクニック
    25.15.25 まとめ/【C#olumn】LINQの難しさ/【Exercise】練習問題
 
インデックス・ページヘ  「[完全版]究極のC#プログラミング」


Insider.NET フォーラム 新着記事
  • 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間