rider.お品書きサクッと書いて公開して、後でちまちま修正する事がママあります。なんじゃこりゃ?と思ったら、数日してから見て貰えると嬉しいです。「スクラムの実践方法を分かりやすくマンガも交えて解説。2.0でLINQを使うの回で、比較的簡単にParallel.ForEachを自前で実装出来ると書いたので、例を見せる。}}コンパイルを通すには、他にもActionクラスが必要だ。このサンプルはVSCoverageToEmmaで実装したもので、以下の場所に完全なコードがある。あとがきむちゃくちゃ大変でした。Calendarのひそひそ声が聞こえ始めた頃です。Calendarをやった事が無かったので、「ふむ、25日まで1日ずつネタを書けばいいのか、簡単じゃないか。やってみるか、一人で」などと考えたのが悲劇の始まりだった。記事のさじ加減が分からない。「まぁ、LINQなら何でもネタがあるよね。一つ一つの記事がある程度独立していて、かつ、短く、読者が応用を想像できるような内容にするってのはどうだろうか?」LINQは現場で、「当たり前に使っている」か、「全く使っていないか」の両極端に感じる。twitterで流れてくるものの中には、「LINQ禁止」とか、あり得ない現場もあるようだ。そんなわけで、あんまり専門寄りに寄ってしまってもあれだから、少しでも底辺を持ち上げて、「LINQって何?」な人口を減らす事が出来たら良いなと思った。自分の中ではLINQが「空気」状態だった。「空気について説明する」が如く、フォーカスする対象が無いのだ。具体的なシチュエーションであれば、いくらでもLINQによる解決策を提示できる。具体例を示し過ぎると、読者が応用を想像しにくくなってしまう。ネタの背景が分かるようにし、かつサジ加減を調整してあまり具体的過ぎる例にしないように(時にはわざとアホな方に振ったり)する必要があった。それに耐えうるネタでなければならない...10回目ぐらいまではパパッと思いついたネタも、その後が続かない。初めはばりばり書いて書き溜めておいたので良かったのだが、本業が忙しいこともあり、段々ストックが底をついてくる。金を貰っているわけでもないのにこのプレッシャー!!そして、ふらふらと、やる気の無かったIQueryableネタをやり始めた。何がって、この後は、アレだ。禁断のネタ「LINQプロバイダー」しかないじゃないか。LINQプロバイダーなら、このネタだけで最後まで続けられるという点では、ネタ詰まりは回避できる。LINQプロバイダーは複雑すぎて、色々説明した後でないと、本題に入れない。これでは、1話毎に完結させるという縛りを満たすことがとても難しい。おまけに複雑さを低減するために、どうしても図を書かなければならない。この迷い、15回ぐらいまで続く。この状態で気がふれたとしか思えない。書く気になったのか、未だに良く分からない...そして、ネタ考案の時間切れと半分ヤケとで、LINQプロバイダーをやらざるを得なくなり、腹を括って突入。Entitiesがブラックボックス過ぎて理解不能と思っている方に向けて、少しでも「仕掛け」が見えるようにする必要があるだろうと。そんなわけで、後半は特に検証とかやったつもりですが、間違いがあったらゴメンナサイ。頑張って、強く縛りを意識して書いてみました。右側のカレンダーを見ると、すげーなー、我ながら良く書いたよなぁ、と思います。LINQプロバイダーの仕上げ前回のLocationFinderクラスによって、検索条件となる文字列の一覧が得られた。WCFインターフェイスを使用して、サービスに送信する。すると、結果レコードがPlaceクラスに入れられて返される。結果が複数のレコードとなる可能性があり、WCFメソッドの戻り値はPlaceの配列で定義されている。これをそのまま返せばよい。今まで扱ってきたのは、あくまでIQueryableによるLINQクエリだ。IEnumerableならそのまま返せばよい(配列はIEnumerableを実装しているので)が、少なくともIQueryableでなければならない。配列をAsQueryableすれば良い。ObjectsのLINQプロバイダーが処理を行うようになる。いま、一息ついたところだが、ここまでの処理で実現したのは、その「最も内側のWhere条件」だ。その外側のLINQクエリは放置されている。これを処理しなければならない。前述のようにもうTerraServerは関係ないため、配列をAsQueryableした結果を使って続きのクエリを実行させる必要がある。これを行わせるのが、「ExpressionTreeModifier」クラスだ。このクラスもExpressionVisitorを継承している。やっていることは単純だ。TerraServerのコンテキストクラスのインスタンスを、上記配列をAsQueryableしたものに挿げ替える。生成されたExpressionは、もはやTerraServerコンテキストを含まない。Objectsで評価可能な状態にある。ObjectsのLINQプロバイダーが管理する。TerraServerが完成した。WordPress%d人のブロガーが「いいね」をつけました。