LINQ in Action 4

第二部(Querying objects in memory)を読了しました。二部は約100ページで二つの章(4章、5章)があります。

ここではデータベースではなく、メモリー上でのLINQ動作の説明です。即ち、いくつかのクラスを定義、オブジェクト配列を作成し、操作します。
4章では、WebおよびWindowプロジェクトを作成し、コントロールを使って条件を変えて、GridViewにデータを表示します。
5章では、すこし突っ込んだ議論があります。5章の最後にLINQのパフォーマンスについて検討します。ここはあくまでもメモリー上での話ですが、配列をforでループし、内容を別の配列にコピーする場合、同じくforeachを使う場合、LINQを使う場合等について、ベンチマークテストを行います。
結果からいうと、簡単な条件の場合は、for文が良くてLINQはその1.5倍の時間がかかります。しかし、ループの中で複雑な作業を要する場合は、その差は僅かになり、更に場合によってはLINQの方がいい成績を出します。
「パフォーマンスだけでなく、プログラムの読みやすさからいえば、LINQの方が総じて勝っている。しかしどちらにしても、何を使うかはユーザが場合に応じてよく検討してください」というのが著者のコメントです。

第三部はデータベースとLINQとの関係(LINQ to SQL)の説明です。入り口まで読みましたが、LINQ to SQLではデータベースとクラスとのマッピングを作り、それを基にLINQ Queryを作成します。
ADO.NETのように明示的にConnectionを作り、必ずcloseするような作業はなく、驚くほどシンプルにQueryを書くことができます。
様々な技法を使ったサンプルプログラムをVS2008 + SQL Serverの環境で動かして、理解を深めることが出来ます。

感想:
1. 余談ですが、第二章ではGridViewおよびDataBindを使っています。わたしもVS2002で早速使ったのですが、わけの分からない動作をし、それに懲りてそれ以降DabaBindを一切使いません。皆さんはどうでしょうか。
2. 通常の手続き型言語では、プログラムは上から下へ実行します(勿論、分岐があれば分岐しますが)。
LINQは遅延実行(deferred execution)をしていて、query文では実際のデータ読み込みはしていなく、実際にデータが必要になったとき初めてqueryを実行します。
例えば、「query文でデータファイルを一行読み、続く文がその一行のデータの処理をする」とすると、後の文の処理が終わると、自動的に(分岐文なしで)最初のデータ読み込み文に返ります(データ読み込み文が一度に全部読み込むのであれば、読み込みは一度だけ)。
LINQはいわば昔の言葉でいえばマクロのような感じですね。
3. 私は、ADO.NETではDataViewをふんだんに使っているのですが、LINQではどうするのか気になっています。

error: コピーできません !!