Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

わんくま東京#49 LT 「DynamicQuery ~MSDN サンプルの逆襲~」

2,276 views

Published on

@ わんくま同盟 東京勉強会 #49 LT

Published in: Technology
  • Be the first to comment

  • Be the first to like this

わんくま東京#49 LT 「DynamicQuery ~MSDN サンプルの逆襲~」

  1. 1. DynamicQuery~MSDN サンプルの逆襲~<br />presented bytakeshik.<br />
  2. 2. 自己紹介<br />takeshikです<br />-> @takeshik on Twitter<br />-> http://www.takeshik.org/<br />MetaTweetまだまだ書いてます<br />そろそろ使える代物になってきた気がしないでもない<br />NEWS:最近 ustはじめました<br />http://www.ustream.tv/channel/csharp-propagation<br />毎週水曜 24:00- 平凡?な内容でぐだぐだやってます。過度な期待はしないでください。<br />
  3. 3. 本日のお題<br />DynamicQuery ライブラリ<br />こいつがすばらしい<br />Twitter でも便利だ便利だと何度も触れ回っていた気がするので、耳蛸な方にはすみません<br />前提条件:<br />.NET Framework 3.5 以上。4 でも OK<br />VB でも問題ないはずだけど例示は全て C# です<br />最低限の LINQ の知識<br />LINQPadとか必需品ですよね!<br />
  4. 4. DynamicQuery とは?<br />Dynamic な Query が書けます<br />文字列で LINQ できます<br />ちょっとした構文解析器もついてます<br />文字列からコードを起こしたい…LINQ したい…!<br />面倒な CodeDOM(と AppDomain)から解放されます!<br />Compiler as a Service の未来を待たずともここに素晴らしいライブラリがあったのです!<br />…どこに?<br />
  5. 5. …ここに。<br />
  6. 6. DynamicQuery とは?<br />べんりライブラリは灯台のすぐ下に転がってました!<br />コードは Microsoft Permissive License (Ms-PL)でライセンスされてるので手を入れるのも研究するのも十分いける!<br />実際のコードは単一ファイル・2000 行程度の大きさ<br />丁寧な使用方法の説明書付き<br />…そんな DynamicQuery ライブラリをご紹介します<br />
  7. 7. サンプル コード<br />DynamicQuery の機能の一端をご紹介<br />LINQPadを使って実際に実行していきます<br />http://www.linqpad.net/<br />C# / VB / F# / T-SQL をお手軽に実行して整形された結果を得られるソフトウェア (基本無料)<br />LINQPadコード内では拡張メソッドによってobj.Dump();とすると結果が整形されて出力されます<br />public static T Dump<T>(this T obj)<br />
  8. 8. サンプル コード: 文字列による LINQ<br />Enumerable.Range(1, 100).AsQueryable()<br /> .Where("it % 3 == 0")<br /> .Select("new ("+ <br />"it.ToString()[Int32(Math.Log10(it))] as Tail,"+<br />"it as Value" +<br />")")<br /> .OrderBy("it.Tail, it.Value descending");<br />同等内容のコード:<br />Enumerable.Range(1, 100)<br /> .Where(it => it % 3 == 0)<br /> .Select(it => new {<br />Tail = it.ToString()[(int) Math.Log10(it)],<br /> Value = it<br />})<br /> .OrderBy(it => it.Tail).ThenByDescending(it => it.Value);<br />
  9. 9. NOTE: 提供される拡張メソッド<br />Any()<br />Count()<br />GroupBy(keySelector, elementSelector)<br />OrderBy(ordering)<br />Select(selector)<br />Skip(int count)<br />Take(int count)<br />Where(predicate)<br />さらに、文字列クエリ内で@0, @1, … 形式の引数の設置も可能<br />
  10. 10. サンプル コード: 文字列から式木を生成する<br />DynamicExpression.ParseLambda<string, bool> ("it.StartsWith("foo")")<br /> .Compile()("foobar");<br />同等内容のコード:<br />        ハ,,ハ       ( ゚ω゚ )  お断りします …というかきっとここに収まらないし!      /    \    ((⊂  )   ノ\つ))       (_⌒ヽ        ヽ ヘ }     ε≡Ξ ノノ `J<br />DynamicExpressionクラスには他のParseLambdaメソッドのオーバーロードや他のメソッドもありますが割愛><<br />
  11. 11. まとめ<br />面白いライブラリなので是非試してみて下さい<br />MSDN ライブラリとか、他にも掘り出し物のコードが埋もれてるかも?<br />色々手を加えてみるのも良いと思います<br />リンク / 参考文献<br />今回のライブラリを含むサンプル: Visual C# 2008 Samples<br />http://code.msdn.microsoft.com/cs2008samples<br />DynamicQuery 文字列クエリ構文のマニュアル<br />アーカイブ内 LinqSamplesDynamicQueryDynamic Expressions.html<br />
  12. 12. ご清聴ありがとうございました。<br />明日 (6/27) はラーメン二郎 都営三田線西台駅東口前横断歩道先高架下店 (通称西台駅前店)の開店日です!<br />

×