Share via


LINQ to SQL (20071212)

皆さんこんにちは

Visual Studio 2008 および .NET Framework 3.5 のリリース、そして .NET Framework 2.0 および 3.0 のリリースでかなりドタバタしてなかなかDEMOの話が進みませんが、LINQ to SQL の解説行きたいと思います。

LINQ to SQL は SQL Server 上のテーブルに対して LINQ のクエリ表現を使用してデータあくアセスを実現するテクノロジです。こう書くと、SQL と何が違うかという点が気になるかと思いますが、SQL はあくまで RDBMS に対するクエリであり、そこからのデータの取得に関しては、また別の仕組みが必要となります。.NET Framework で提供しているテクノロジとしては ADO.NET がそこにあたります。 LINQ to SQL ではRDBMS への問い合わせから、メモリ上のオブジェクトへの格納がひとつのクエリ表現で実現できるというところが SQL と比較した際の特徴となります。

なお、この DEMO では SQL Server 2000 で提供されていた Northwind という DB を使用しています。下記の URL を参考にインストールしてください。
https://msdn2.microsoft.com/ja-jp/library/ms143221.aspx

それでは早速解説を始めていきたいと思います。

まず、アクセス対象となるテーブルをツールを使って指定します。
プロジェクトを右クリックして新しい項目の追加LINQ to SQL クラスを選択します。
linq2sql

そこにサーバーエクスプローラーからテーブルを選択してドラッグ アンド ドロップします。
image

あとは、コードです。

NorthWindDataContext db = new NorthWindDataContext();

var customers = from c in db.Customers
                where c.City.StartsWith("M")
                group c by c.City into g
                select new { City = g.Key, Count = g.Count() };

上記コードの1行目、先ほど追加した LINQ to SQL クラスで生成されたNorthWindDataContext クラスです。こちらはファイル名+DataContext という名前でクラスが生成されます。こちらのクラスではDBとの接続を管理したりこれらのDBに対応する拡張メソッドを提供したりしています。この NorthWindDataContext のインスタンスを用いてDBのテーブルやその項目にアクセスします。

LINQの文法自体は前回のLINQ to Object とほぼ同じですので省略しますが、非常に簡単にアクセスできることがおわかりいただけるかと思います。

また、今回のようにテーブルに関係がある場合、その親子関係をたどって親の項目にアクセスすることも可能です。

簡単すぎて非常に申し訳ございませんが、ここまで簡単にできるということをご理解いただければと思います。

次回のDEMOはLINQ to XML です。
といっても、いろいろお知らせでまた期間が空いてしまうかもしれませんが…その場合は、申し訳ございませんが気長にお待ちください。