特集:VBプログラマーのためのLINQ超入門(前編)

LINQ(リンク)の基礎知識

デジタルアドバンテージ 遠藤 孝信
2008/09/26
Page1 Page2 Page3 Page4


本稿は、すでに公開されている「特集:C#プログラマーのためのLINQ超入門(前編)LINQ(リンク)の基礎知識」を、Visual Basicプログラマー向けに加筆・修正したものです。

 Visual Studio 2008(以下、VS 2008)にはさまざまな新機能が追加されていますが、最大の新機能といえばやはり「LINQ」(「リンク」と読みます)でしょう。

 LINQとは、

Language INtegrated Query

の略で「統合言語クエリ」と訳されますが、もう少し分かりやすくいい換えれば、

言語(Visual BasicやC#など)のコード内に記述できるクエリ

となります。クエリとは「問い合わせ」です。開発でクエリといえばデータベース検索に使われるSQL文が代表的ですが、LINQではSQL文に似た構文によりクエリを記述し、データベースをはじめ、さまざまな対象から、データの検索や集計、取得などが可能になります。

 LINQによるクエリをコード内に記述できるようにするため、Visual BasicやC#は拡張されバージョン・アップしています。LINQが利用可能な言語は、Visual Studio 2008とともに登場した.NET Framework 3.5に含まれるVisual Basic 2008(=Visual Basic 9.0。以降、VB 9.0)やC# 3.0です。また.NET Framework 3.5のクラス・ライブラリには、LINQのクエリを実行するのに必要なクラス群が追加されています。

 本稿ではVBプログラマーの方に向けて、LINQを使ううえで最低限必要な知識を分かりやすく解説していきます。これからLINQを学ぼうという方の最初の一歩となれば幸いです。

LINQで記述された問い合わせ

 まずはLINQにより、これまで記述していたデータベースの問い合わせのためのVBのコードがどのように変化するのかを見ていきます。

■ADO.NET+SQL文によるデータベースへの問い合わせ

 .NETでデータベースのクエリというと、これまではADO.NETのフレームワーク(クラス・ライブラリ)を使って行っていました。これは例えば次のようなコードになります。

Imports System.Data.SqlClient

Module Module1

  Sub Main()

    ' 接続文字列
    Dim connStr As String = _
        "Data Source         = .\SQLEXPRESS;" _
      & "AttachDbFilename    = |DataDirectory|\NORTHWND.MDF;" _
      & "Integrated Security = True;" _
      & "User Instance       = True;"

    Using conn As New SqlConnection(connStr)

      ' 発行するSQL文
      Dim queryStr As String = _
        "SELECT OrderID, EmployeeID, OrderDate, ShipCountry" _
        + " FROM Orders" _
        + " WHERE ShipCountry = 'Norway'"

      Dim command As New SqlCommand(queryStr, conn)

      conn.Open()  ' コネクションのオープン
      Dim r As SqlDataReader = command.ExecuteReader() ' SQL文の実行

      ' 結果を1レコードずつ取得
      While r.Read()
        Console.WriteLine("{0}, {1}, {2}, {3}", _
        r("OrderID"), r("EmployeeID"), _
        r("OrderDate"), r("ShipCountry"))
      End While

      r.Close()
      conn.Close()
    End Using

    Console.ReadLine() ' キーが押されるまで待機
  End Sub

End Module
リスト1 ADO.NETによるデータベースの検索

 このサンプル・プログラムを実行するには、まずVS 2008でコンソール・アプリケーションのプロジェクトを新規作成します。次にサンプルのデータベース・ファイルである「NORTHWND.MDF」をソリューション・エクスプローラのプロジェクト名の部分にドラッグ&ドロップしてください。NORTHWND.MDFの入手については「連載:Visual Studio 2005によるWindowsデータベース・プログラミング 第4回」で解説しています。これによりデータソース構成ウィザードが起動しますが[キャンセル]ボタンをクリックしてキャンセルしてください。そしてリスト1のコードを入力します。

 リスト1のSQL文では、Ordersテーブルから、ShipCountry列の値が「Norway」のレコードを選択し、そのレコードの4つの列の値を取得しています。ADO.NETによるプログラミングに関しては、「連載:ADO.NET基礎講座 第2回 .NETデータ・プロバイダによるデータベースのアクセス Page2」を参照してください。

 リスト1の実行結果は次のようになります。

10387, 1, 1996/12/18 0:00:00, Norway
10520, 7, 1997/04/29 0:00:00, Norway
10639, 7, 1997/08/20 0:00:00, Norway
10831, 3, 1998/01/14 0:00:00, Norway
10909, 1, 1998/02/26 0:00:00, Norway
11015, 2, 1998/04/10 0:00:00, Norway
リスト1の実行結果

 さて、リスト1で示したコードは、ADO.NETを利用したデータベース・プログラミングの基本的なコードといえますが、SQL文の記述に関しては次のような問題点があります。

  • SQL文を文字列で記述しなければならず、その構文が正しいかどうかは実行するまで分からない(コンパイル時に構文エラーを検出できない)
  • SQL文の記述時にIntelliSense機能で列名を自動補完できないため不便

 例えばテーブルの列名のスペルを間違ったとしても、それは実行時にSQL文が送信されるまでエラーになりません。LINQはまずこれらの問題を解決してくれます。


 INDEX
  VBプログラマーのためのLINQ超入門(前編)
  LINQ(リンク)の基礎知識
  1.ADO.NET+SQL文によるデータベースへの問い合わせ
    2.LINQによるデータベース/コレクションへの問い合わせ
    3.クエリの実行を支えるさまざまなLINQプロバイダ/LINQの書き方
    4.そのほかのポイント/LINQPadの紹介
 
  VBプログラマーのためのLINQ超入門(後編)
  LINQによるデータベース・アクセスとO/Rマッピング
    1.LINQのメソッド構文
    2.データベースの問い合わせを行うLINQ to SQL
    3.O/RマッピングとLINQ to SQL


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 記事ランキング

本日 月間