ホーム > .NET, LINQを楽しむ > LINQ to SQLで抽出と並び替え

LINQ to SQLで抽出と並び替え

※この投稿はMicrosoft Visual Studio 2008 Beta2で動作を確認しています。

LINQ to SQLではSQL Server上のデータベースに含まれるデータをプログラムから操作することができます。
まずは以下のような内容でPeopleテーブルを作成しました。

 image

次にプロジェクトに新しい項目の追加からLINQ to SQLクラスを追加します。

 image_3

新たに表示されるページ(LINQTEST.dbml)の左ペインにサーバエクスプローラからPeopleテーブルをドラッグ アンドドロップすると、Peopleクラスが自動的に生成されます。

 image_4

このページを保存して、自動的に生成されたクラスを確定したうえで、メインのプログラムを記述します。

using System;
using System.Linq;

namespace LINQ4
{
    class Program
    {
        static void Main(string[] args)
        {
            LINQTESTDataContext dtc = new LINQTESTDataContext();
            dtc.Log = Console.Out;

            var query = from p in dtc.People
                        where p.Gender == 1 && p.Age >= 20
                        orderby p.Age
                        select p;

            foreach (var item in query)
            {
                Console.WriteLine("名前={0}, 年齢={1}", item.Name, item.Age);
            }

            Console.Read();
        }
    }
}

LINQ to SQLで重要になるのは、テーブルをドラッグ アンド ドロップすることで自動的に生成されるDataContextです。
ドラッグ アンド ドロップによりどのようなプログラムコードが自動生成されているかは、LINQ to SQL クラス名.designer.cs ファイルを見ることで確認できます。
このDataContext(上記ではLINQTESTDataContext)に含まれるテーブル(dtc.People)に対してLINQを記述していきます。

LINQ自体の記述はObjectやXMLを対象とした場合とほとんど大差はありません。
拡張メソッドを利用した記述も同じように利用できます。DataContextに含まれるテーブルが操作の対象となる点にだけ気をつけていれば十分です。

            var query = dtc.People.Where(p => p.Gender == 1 && p.Age >= 20).OrderBy(p => p.Age);

実行結果は以下のようになります。

 image_5

この実行結果にSQL文が含まれるのはプログラム中でDataContextのLogプロパティに標準出力(Console.Out)を設定しているためです。
LINQ to SQLのプログラムがパラメータを利用したSQLクエリに変換され、実行されていることがわかります。

このSQLクエリがどのタイミングで実行されるのか、ブレークポイントを指定してデバックを実行して確認してみましょう。

 image_6

上記のように、LINQの記述の後のforeachにブレークポイントを設定した場合、この時点ではコンソール上にSQL文は表示されません。
F11キーを押して1ステップずつ確認していくと、2ステップ目の以下のタイミングでSQL文がコンソール上に表示されます。

 image_7

 image_8

このことにより、LINQの記述でquery変数に直接データが設定されるのではなく、query変数の内容にアクセスしようとしたタイミング(foreach内部)でSQL文が生成/発行され、データが取り出されることが確認できます。

カテゴリー:.NET, LINQを楽しむ
  1. まだコメントはありません。
  1. No trackbacks yet.

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。