気楽なソフト工房

プログラミングについていろいろな記事を書いています。



mykonos2008

Author:mykonos2008
システムエンジニアとして働いている30代の会社員です。
仕事や趣味でプログラムを書いている方の役に立つ記事を書いていきたいと思っています。
ご意見、ご感想はこちらまで
If you are an english speaker,Please visit my english blog.

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
本日は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つなのです。

  IEnumerable query = from person in persons
                        orderby person.Age
                        select person;

これをシンタックスシュガーを使わない形で記述すると以下にようになります。

   IEnumerable query = 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

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。