.NET Framework 4.5 におけるデータ アクセスの概要 その 4 ~ LINQ ~
概要編
応用編
- ADO.NET Entity Framework
- 全体像
- DBファースト、モデルファースト
LINQ (Language Integrated Query) は、.NET Framework 3.5 で導入された革新的な機能で、オブジェクトの世界とデータの世界の間の橋渡しをするものです。 従来、データに対するクエリは単純な文字列として表され、コンパイル時の型チェックや IntelliSense のサポートは利用できませんでした。 また、RDB、XML 、.NET コレクションオブジェクト、Web サービスなど、データ ソースの種類に従って異なるクエリ言語を習得する必要がありました。
LINQを用いることでデータソースの種類に関わらず、一貫したSQL ライクな構文を用いて、完全な型チェックと IntelliSense のサポートが有効になります。LINQが扱うデータソースは非常に多岐にわたりますが、実際にLINQが直接扱うものは.NETのオブジェクトになります。したがって異なるデータソースを扱うには専用のデータプロバイダが必要になります。このデータプロバイダがデータソースの差異を吸収(.NETのオブジェクトに変換)してくれるため、LINQはデータソースの種類にかかわらず同じ構文でデータを操作することができるのです。
LINQライブラリにはデフォルトで5つのプロバイダが提供されています。これにはddADO.NETや、ADO.NET Entity Frameworkの オブジェクトが含まれます。加えて LINQ で扱うことの出来るデータソースは、RDBに関連するものばかりではありません。例えば、LINQ to Objectsは、LINQのデータソースとして.NETオブジェクトを扱うためのものですし、LINQ to XMLはXMLドキュメントをデータソースとして扱うものです。つまり、LINQはデータベース処理のみでなく、プログラムのあらゆる場面で有効で、それまでの処理に対して補完的な立ち位置であることを意味します。
図3 LINQ全体像
1: int[] numbers = new int[7] { 0, 1, 2, 3, 4, 5, 6 };
2:
3: var numQuery =
4: from num in numbers
5: where (num % 2) == 0
6: select num;
LINQを用いることで、様々なデータソースに対して容易にアクセスすることが可能になります。その結果、開発生産性、保守性の向上を期待できます。一方、LINQはいわゆるラッパー的な処理の一種です。ラッパーは、当然直接的なアクセスに比べて追加の処理が行われるため、パフォーマンスは必ずしもいいとは言えません。そのため、パフォーマンスが大きな課題となることが予想されるときにはLINQは適切とはいえません。
LINQの詳細についてはMSDNライブラリを参照してください。