本日はLINQを使う上でおさえておきたい基本的な事柄についてお話をします。
LINQプロバイダ
前回の記事ではPersonという自作クラスの配列に対してシンプルなLINQクエリを実行するサンプルを
紹介しましたが、LINQでは通常のオブジェクトの他にデータベースやXML、Webサービスなど様々なデータソースに対して
クエリを実行することが出来ます。
標準ライブラリで提供されているものだけでも以下のものがあります。
・LINQ to Object
・LINQ to DataSet
・LINQ to SQL
・LINQ to Entities
・LINQ to XML
「LINQ to Object」は前回の記事で紹介したユーザ定義クラスのコレクションに対してクエリを実行するタイプのものです。
「LINQ to DataSet」、「LINQ to SQL」、「LINQ to Entities」はいずれもデータベースに対してクエリを実行するものです。
「LINQ to XML」はその名の通りXMLに対してクエリを実行するためのものです。
「LINQ to Object」はIEnumerable、IEnumerable<T>を直接使用して、ユーザ定義クラスのコレクションに対してクエリの
実行を行います。その他のものについてはLINQプロバイダと呼ばれる中間クラスを通して、目的のデータソースに対して、
クエリが実行されます。
LINQプロバイダはAmazon、Google、Twitter、Excelなど様々なデータソースに対するものが提供されています。
※「Charlie Calvert's Community Blog」に詳細が紹介されています。
また、System.Linq名前空間の「IQueryable」または、「IQueryable<T>」と「IQueryProvider」を実装するクラスを作成し、
独自のLINQプロバイダを作成することも可能です。
LINQとC#3.0の言語仕様
LINQはC#3.0と.NET Framework3.5から導入された新機能ですが、その正体は.NET Framework3.5から追加されたAPIの1つなのです。
そして、C#3.0にはそれらLINQに関するAPIを使いやすくするための「シンタックスシュガー」が追加されているのです。
※シンタックスシュガー(糖衣構文)とはプログラムコードを読み書きしやすくするための構文のことを言います。
実は、前回の記事で扱った以下のクエリも新しく導入されたシンタックスシュガーの1つなのです。
これをシンタックスシュガーを使わない形で記述すると以下にようになります。
内容はまた後日説明いたしますが、後者の記述の仕方より、前者の方が明らかに見易いですよね。
このようにLINQを扱うためにはC#3.0から導入された新たな言語仕様を学ぶ必要が出てきます。
余談ですが、C#の普及が進まない理由の1つに技術革新の速度が早すぎるというものがあると記事で読んだことがあります。
これは技術者としては嬉しいことである反面、キャッチアップしていくことが大変であるという側面もあります。
そうこうしているうちにVisual Studioの次期バージョンと共にC#4.0もリリースされることになっています。
みなさまはC#の技術革新の速度についてどのようにお感じになられていますでしょうか?
さて、次回からLINQ to Objectを使ってLINQクエリの仕様を掘り下げていきたいと思います。
LINQプロバイダ
前回の記事ではPersonという自作クラスの配列に対してシンプルなLINQクエリを実行するサンプルを
紹介しましたが、LINQでは通常のオブジェクトの他にデータベースやXML、Webサービスなど様々なデータソースに対して
クエリを実行することが出来ます。
標準ライブラリで提供されているものだけでも以下のものがあります。
・LINQ to Object
・LINQ to DataSet
・LINQ to SQL
・LINQ to Entities
・LINQ to XML
「LINQ to Object」は前回の記事で紹介したユーザ定義クラスのコレクションに対してクエリを実行するタイプのものです。
「LINQ to DataSet」、「LINQ to SQL」、「LINQ to Entities」はいずれもデータベースに対してクエリを実行するものです。
「LINQ to XML」はその名の通りXMLに対してクエリを実行するためのものです。
「LINQ to Object」はIEnumerable、IEnumerable<T>を直接使用して、ユーザ定義クラスのコレクションに対してクエリの
実行を行います。その他のものについてはLINQプロバイダと呼ばれる中間クラスを通して、目的のデータソースに対して、
クエリが実行されます。
LINQプロバイダはAmazon、Google、Twitter、Excelなど様々なデータソースに対するものが提供されています。
※「Charlie Calvert's Community Blog」に詳細が紹介されています。
また、System.Linq名前空間の「IQueryable」または、「IQueryable<T>」と「IQueryProvider」を実装するクラスを作成し、
独自のLINQプロバイダを作成することも可能です。
LINQとC#3.0の言語仕様
LINQはC#3.0と.NET Framework3.5から導入された新機能ですが、その正体は.NET Framework3.5から追加されたAPIの1つなのです。
そして、C#3.0にはそれらLINQに関するAPIを使いやすくするための「シンタックスシュガー」が追加されているのです。
※シンタックスシュガー(糖衣構文)とはプログラムコードを読み書きしやすくするための構文のことを言います。
実は、前回の記事で扱った以下のクエリも新しく導入されたシンタックスシュガーの1つなのです。
IEnumerablequery = from person in persons orderby person.Age select person;
これをシンタックスシュガーを使わない形で記述すると以下にようになります。
IEnumerablequery = persons.OrderBy((x) => x.Age).Select((x) => x);
内容はまた後日説明いたしますが、後者の記述の仕方より、前者の方が明らかに見易いですよね。
このようにLINQを扱うためにはC#3.0から導入された新たな言語仕様を学ぶ必要が出てきます。
余談ですが、C#の普及が進まない理由の1つに技術革新の速度が早すぎるというものがあると記事で読んだことがあります。
これは技術者としては嬉しいことである反面、キャッチアップしていくことが大変であるという側面もあります。
そうこうしているうちにVisual Studioの次期バージョンと共にC#4.0もリリースされることになっています。
みなさまはC#の技術革新の速度についてどのようにお感じになられていますでしょうか?
さて、次回からLINQ to Objectを使ってLINQクエリの仕様を掘り下げていきたいと思います。
コメント
コメントの投稿
トラックバック
http://csfun.blog49.fc2.com/tb.php/62-033c297e