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.

LINQ の概要とかもろもろ

17,827 views

Published on

LINQ 勉強会(VSハッカソン倶楽部勉強会 大阪 第2回)のセッション資料です。

Published in: Technology
  • DOWNLOAD FULL MOVIE, INTO AVAILABLE FORMAT ......................................................................................................................... ......................................................................................................................... ,DOWNLOAD FULL. MOVIE 4K,FHD,HD,480P here { https://tinyurl.com/yybdfxwh }
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

LINQ の概要とかもろもろ

  1. 1. 青柳 臣一 @ShinichiAoyagi LINQ の概要とかもろもろ LINQ 勉強会 VSハッカソン倶楽部勉強会 大阪 第2回 2013/6/29(土)
  2. 2. • 青柳 臣一(あおやぎ しんいち) @ShinichiAoyagi http://shinichiaoyagi.blogspot.jp/ • 職業 C# やら VB やら WPF やらでソフトウエア開発 最近はスマホとか あと PHP + MySQL で SNS 作ったり 自己紹介
  3. 3. • Language-Integrated Query • クエリー機能を言語に統合 • クエリーは SQL とかのクエリー 「問い合わせ」 • Visual Studio 2008(.NET Framework 3.0)で搭載 LINQ
  4. 4. • C# や VB で SQL みたいな書き方ができる • let、join、group、orderby など一通りのこ とはできる クエリー式 var array = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; var q = from x in array where x % 2 == 0 select x; Dim array() = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} Dim q = From x In array Where x Mod 2 = 0 Select x
  5. 5. • すべてクエリー式を使わない形に変換可 能 クエリー式はシンタックスシュガー var q = array .Where(x => x % 2 == 0) .Select(x => x); Dim q = array. Where(Function(x) x Mod 2 = 0). Select(Function(x) x)
  6. 6. • VS 2008 のときの追加機能は LINQ のた め • 暗黙的な型指定(var、Dim) • 拡張メソッド • ラムダ式 • 匿名クラス • オブジェクト初期化子、コレクション初 期化子 すべては LINQ のために (1)
  7. 7. すべては LINQ のために (2) var people = new[] { new Person() { Name = “太郎", Age = 14, }, new Person() { Name = “花子", Age = 17, }, }; var q = people .Where(x => x.Age <= 15) .Select(x => new { x.Name }); var コレクション初期化子 オブジェクト初期化子 拡張メソッド ラムダ式 匿名クラス
  8. 8. すべては LINQ のために (3) Dim people() = { New Person() With {.Name = “太郎", .Age = 15}, New Person() With {.Name = “花子", .Age = 14} } Dim q = people. Where(Function(x) x.Age <= 15). Select(Function(x) New With {x.Name}) var コレクション初期化子 オブジェクト初期化子 拡張メソッド ラムダ式 匿名クラス
  9. 9. • IEnumerable – 配列やコレクションは IEnumerable を実装し ている • だから – System.Linq.Enumerable LINQ to Objects (1) public static IEnumerable<TSource> Where<TSource>( this IEnumerable<TSource> source, Func<TSource, bool> predicate); public static IEnumerable<TSource> Where<TSource>( this IEnumerable<TSource> source, Func<TSource, int, bool> predicate);
  10. 10. • System.Linq.Enumerable.Where LINQ to Objects (2) public static IEnumerable<TSource> Where<TSource>( this IEnumerable<TSource> source, Func<TSource, bool> predicate) { foreach (var item in source) { if (predicate(item)) { yield return item; } } }
  11. 11. • 要するに for や foreach になります ↑ ちょっと乱暴 LINQ to Objects (3)
  12. 12. • XElement 族 LINQ to XML (1) var xml = new XElement("People", new XElement("Person", new XElement(“Name”, “太郎"), new XElement("Age", 15) ), new XElement("Person", new XElement(“Name”, “花子"), new XElement("Age", 14) ) );
  13. 13. LINQ to XML (2) var q = xml.Descendants("Person") .Where(x => (int)x.Element("Age") <= 15); var q = xml.Descendants("Person") .Where(x => ((int?)x.Element("Age") ?? int.MaxValue) <= 15); xml.Descendants("Person").Max(x => (int?)x.Element("Age"))
  14. 14. • VB は変態すぎてちょっと、、、 LINQ to XML (3) Dim xml = _ <People> <Person> <Name>太郎</Name> <Age>15</Age> </Person> <Person> <Name>花子</Name> <Age>14</Age> </Person> </People>
  15. 15. • VB は変態すぎてちょっと、、、 LINQ to XML (4) Dim q = From x In xml...<Person> Where x.<Age>.Value <= 15 Order By x.<Age>.Value Select x.<Name>
  16. 16. • 見た目は LINQ to Objects とほぼ同じ LINQ to SQL (1) var db = new DataClasses1DataContext(); var q = from x in db.People where x.Age <= 15 select x.Name; var db = new DataClasses1DataContext(); var q = db.People .Where(x => x.Age <= 15) .Select(x => x.Name);
  17. 17. • テーブルとかは IQueryable • だから – System.Linq.Queryable LINQ to SQL (2) public static IQueryable<TSource> Where<TSource>( this IQueryable<TSource> source, Expression<Func<TSource, bool>> predicate); public static IQueryable<TSource> Where<TSource>( this IQueryable<TSource> source, Expression<Func<TSource, int, bool>> predicate);
  18. 18. • Expression って? – 型(int や string と同じく一級市民の型) – System.Linq.Expressions.Expression<TDeledate> クラスの こと • 実行コードをデータとして表現したもの • 暗黙の型変換 – ラムダ式は暗黙に Expression 型に変換できる – 1 を 1.0 に暗黙に変換できるように “x => x % 2 == 0” をこのラムダ式の内容を表す Expression 型に変換できる LINQ to SQL (3)
  19. 19. • コンパイル時にすること – ラムダ式を Expression 型に変換するコード を作り出す • 実行時(列挙したとき)にすること – Expression 型を元に SQL 文を作ったりして 実行 LINQ to SQL (4)
  20. 20. ぐるぐる回すもの LINQ とは
  21. 21. • ぐるぐる回らない LINQ(笑) • 非同期やイベントドリブンなものを LINQ っぽく扱えるようにするもの Reactive Extensions (Rx)

×