LINQ

17件の投稿

LINQ をどうするか

O’Reilly の[Programming Entity Framework]の9章まで読んで、開発途中のプログラムをLINQで書き換えています。[LINQ in Action]と2冊の拾い読みでは、なかなかスイスイとLINQは使えません。実際書いてみるといろいろな問題が発生します。

これまでADO.NETを使って、DBとは非接続で作業をしていました。LINQは遅延接続でむしろ「非接続の時間を少なくする」というコンセプトのように思います。既存のプログラムを大幅に書き換えないで、LINQの長所をどのように取り入れるか。

また、単純なことですが、クエリであるテーブルを使用したとします。LINQ to SQLやLINQ to Entity Framework のWizardを使うと、テーブルに対応したクラスが自動的にプログラム内に作成されます。
別のクエリーで再度そのテーブルを使用しようとすると、すでに最初のクエリでそのテーブルに対応したクラスがありますので、クラスの再定義になりエラーになります。逃げる方法があるのか。

このように検討しなければいけない問題が多々あります。
必要に応じて文献等を読み返し、実務に沿って勉強していきたいと思います。

[プログラミング LINQ]は訳が悪いし、[LINQ in Action]は話題が少し古い。[Programming Entity Framework]は解説書としては余りにも不親切です。新たに[Murach’s ADO.NET 3.5, LINQ, and the Entity Framework With VB 2008]を注文しました。勉強する情報としてはこれらとオンラインヘルプで充分でしょう。

LINQあるいは[Entity Framework]そのものの学習は当然ですが、新しいコンセプトによる技術はそれなりの「癖」がありますので、これを使いこなすとなると、この習得には少なくとも後1ヶ月はかかるだろうと予想しています(たぶん甘い)。

ADO.NETでも、従来のデータベースプログラミングと大きく異なりましたので、これを使いこなすまでに半年程度かかりました。
ADO.NETは、David Sceppaの[プログラミング ADO.NET]で勉強しました。何か不満が残る本です。「要所をキッチリ押さえていない」と感じました。

予断ですが、Visual BasicのFrancesco Balenaは100%信頼しています。とても要領よく的確に解説します。VB6の解説書から3つのシリーズを買いました。「頭のいい人なのだろう」と勝手に想像しています。この人の解説書なら出版されれば文句なく即座に購入します。

Programming Entity Framework

ブツブツ文句を言いながら[Programming Entity Framework]の7章まで読み進みました。この本のいいところは、VS2008SP1に沿ってEntitiy Frameworkを解説している点です。7章ではリアリティのあるビジネスモデルを設定して、8章以降でこのモデルを操作します。

ウィザードを使えばEDM(ADO.NET Entity Data Model)を容易に作ることができますが、実際に使うには相応の調整が必要のようで、その意味ではこの本の解説は貴重です。

「16章(約500ページ)までは読みたい」と思っています。現在150ページを過ぎたあたりですので、先はまだまだです。

.NET Framework3.5でC#とVBの言語拡張がありました。これもよさそうなのでボチボチ使いたいと思います。

LINQあるいは[ADO.NET Entity Framework]

そもそもLINQあるいは[ADO.NET Entity Framework]はこれからどうなっていくのでしょうか。
[ADO.NET Entity Framework]に対して、多くのテスターが不信任を出しています。
http://japan.zdnet.com/sp/feature/07microsoft/story/0,3800083079,20376043,00.htm

それでもマイクロソフトは[ADO.NET Entity Framework]の開発を進めていくそうです。
[ADO.NET Entity Framework]のいい解説書もない中、今この技術に飛びつくのは得策でしょうか。
もう少し時間がたてば答えがはっきりするでしょう。

いまそのことは横に置いて、勉強中の私がこの時点で理解している限りで、この技術の俯瞰図を描いてみようと思います。

リレーショナルデータベースの問い合わせ、変更等の操作の方法として、リレーショナルDBが考案されて以来SQLがあります。SQLはデータベースを直接操作します。

ADO.NETでは、DBとの非接続の技術が導入されました。すなわち、一度プログラムでメモリ上(Dataset)にデータを取り込んで(DBの接続を切断し)、その後でまとめてDBに返す方法です。これもアプリケーションプログラムでDBを直接管理します。

[ADO.NET Entity Framework]でも直接DBを操作する方法は残っていますが(EntityClient)、その上にビジネスロジックのEntityを操作することでDBそのものを操作をする方法が提案されました。
その操作手段として、まずEntitySQLというT-SQLに似た文字列式があります。EntitySQLはこのどちらのレイヤでも動作します。

これに対して[LINQ to Entity]はいわゆるLINQ構文で、VS2008ではインテリセンスが作動しますし、コードの生産性は非常に高まると思われます。

私は[ADO.NET Entity Framework]についてはまだ初心者ですが、自分で書いてみると、ADO.NETで一つのクエリを発行するのに、コネクションを開き、データセットを定義し…とかの前準備が沢山必要であることを考えるといかに少ないコードですむかということを痛感します。

細かいことはまだわからないことが多々ありますが、(プロジェクトによっては)十分使う価値があると思います。

O’reilly “Programming Entity Framework”

O’reillyの”Programming Entity Framework”を読み始めましたが、少し失望しています。

この本は余り真面目に書いていない。先に読んだ”LINQ in Action”(以下LIAと書きます)のように本の構成がしっかりしていなくて「やっつけ仕事」に思えます。順序だって解説をしていないのです。

例えばラムダ式についてもほんの数行しか記述が無い。
例えば、次のquery expression

string[] words = { “hello”, “wonderful”, “linq”, “beautiful”, “world” };
var shortWords =
from word in words
where word.Length <= 5
select word;

と、次のC#の式との関係の説明もない。
var shortWords =
words
.Where(word => word.Length <= 5)
.Select word;

このC#で、ドットで繋がったコードが何なのか、何の説明もない(LIAではC#3.0の拡張メソッドで、query operatorとして説明がある)。

こんなに分厚いのに、順序だった解説をしないで、色々な話題が次々に出てくる。私は先にLIAを読んでいたからいいけれど、初心者も読者の対象にしているという割には不親切な解説です。
長所はVS2008SP1にそって解説していますので、そのマニュアルと考えれば、及第というところでしょうか。
どちらにしても、今のところまだEntity Frameworkの解説書が殆どでていないので、消去法ではいけば「止むを得ない」というところでしょうか。

話が変わります。
パッケージソフトのマニュアルを作成したのですが、説明に貼り付けた画面画像が不鮮明でどうしたものかと悩んでいます。
画像が大きくて、そのままの大きさでマニュアルに貼り付けることが出来ないため、Photoshopで縮小していますが、縮小するとどうしても文字がつぶれてしまいます。
ソフトから起動するHelpは、マイクロソフトの仕様ではHTMLで作成しなければなりません。
ということは、画像はjpeg等のラスターデータになります。
従って、マイクロソフトがHelpの仕様を変えない限り、画像は縮小を変えないか、縮小すれば画像が不鮮明になるのは「しょうがない」と諦めるしかないと結論づけています(マイクロソフトはSilverlightを発展させてこの問題を解決してくれるかも知れない?)。

現在はマニュアルもHelpと同じようにHTMLで作成して、Pdfに変換していますが、Htmlにする必要はないので、こちらは「工夫した方がいいかな」と思っています。
TEXというUNIXの世界で使われていた無料のドキュメント作成ソフトがあります。インストールしましたが、フォントの設定が悪く、スムースに動作しません。ただし、問題はTEXを使って画像の問題が解決するかどうかです。

Pdfはベクトルデータですので、貼り付ける画像をPdfにする手はありますが、これも縮小の割合に限界があります。
まだ悩みは続いています。

風が吹けば桶屋が儲かる

そもそも私は、新しいプロジェクトを始めるにあたって、LINQが使えるかどうか調査をしたのです。その結果は、コンピュータを一台買い、Windows 7をインストールすることになりました。

ことの顛末は、
->LINQは使えそうだ
->ADO.NET Entity FrameWorkを動かしてみる
->私のコンピュータはVS2008のエンティティ画面でモデルブラウザを表示すると必ずシステムダウンする
->マイクロソフトにバグ報告をすると同時に、新しいコンピュータを注文する
->届くのに2週間かかる
->それまで待っておれない。手持ちの環境で動作するようにする
->OSを変える
という訳でWindows 7 RCをインストールし、続いてVS2008やSLQ Server 2008をインストールしました。
Windows 7 ではグラフィックボードが認識されなくて、縦の解像度が800以下なのが気にいりませんが、モデルブラウザを表示しても、システムダウンすることはなさそうです。

私は、エクスプローラでファイル構造をツリーで表示するのが好きなのですが、Windows 7ではどうすればツリー構造を表示できるのでしょうか。

話が変わります。一ついいことがありました。
アマゾンに今月一日「Programming Entity Framework」を注文しました。12日の配達予定になっていましたので、アメリカから送ってくるのだろうから仕方ないと思っていましたが、本日届きました。

例によって米アマゾンでの評価を見て注文しました。O’reillyのSafariシリーズの一冊です。O’reillyの本は字が詰まっていますし、800ページ近い本ですので、これだけで少し気後れします。

一見してEntity Frameworkについてしっかり書いてあるようです。気楽に必要なところを拾い読みしましょう。なんとかEntity Frameworkをものにしたいと思います。