LINQ概要
Upcoming SlideShare
Loading in...5
×
 

LINQ概要

on

  • 2,855 views

LINQ勉強会のセッション資料です。

LINQ勉強会のセッション資料です。

Statistics

Views

Total Views
2,855
Views on SlideShare
675
Embed Views
2,180

Actions

Likes
4
Downloads
0
Comments
0

18 Embeds 2,180

http://shinichiaoyagi.blogspot.jp 2042
http://mj89sp3sau2k7lj1eg3k40hkeppguj6j-a-sites-opensocial.googleusercontent.com 55
http://shinichiaoyagi.blogspot.com 24
http://cloud.feedly.com 20
http://feeds.feedburner.com 11
http://reader.aol.com 7
https://twitter.com 6
http://shinichiaoyagi.blogspot.com.br 2
http://shinichiaoyagi.blogspot.ru 2
http://webcache.googleusercontent.com 2
http://shinichiaoyagi.blogspot.com.es 2
http://shinichiaoyagi.blogspot.de 1
http://shinichiaoyagi.blogspot.hk 1
http://shinichiaoyagi.blogspot.sg 1
http://cache.yahoofs.jp 1
http://feedly.com 1
http://shinichiaoyagi.blogspot.cz 1
http://shinichiaoyagi.blogspot.ca 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

LINQ概要 LINQ概要 Presentation Transcript

  • 青柳 臣一 @ShinichiAoyagi LINQ 概要 第2回 LINQ 勉強会 VSハッカソン倶楽部勉強会 大阪 LINQ分科会 2013/8/24(土)
  • • 青柳 臣一(あおやぎ しんいち) @ShinichiAoyagi http://shinichiaoyagi.blogspot.jp/ • 職業 C# やら VB やら WPF やらでソフトウエア開発 最近はスマホとか あと PHP + MySQL で SNS 作ったり 自己紹介
  • • Language-Integrated Query • クエリー機能を言語に統合 • クエリーは SQL とかのクエリー 「問い合わせ」 • Visual Studio 2008(.NET Framework 3.0)で搭載 LINQ (1)
  • • コレクションの検索 – 配列や List<T> など LINQ to Objects • データベースの検索 – DataContext LINQ to SQL LINQ (2)
  • • C# や VB で SQL みたいな書き方ができ る クエリー式 (1) 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
  • • let、join、group、orderby など一通り のことはできる – 標準クエリ演算子の概要 http://msdn.microsoft.com/ja-jp/library/vstudio/bb397896.aspx – VB には Aggregate があるが C# には無い (C# では書けない) クエリー式 (2)
  • • VB の Skip、Take • VB の Aggregate クエリー式 (3) Dim q = From x In array Skip 3 Take 2 Select x Dim total = Aggregate x In array Where x Mod 2 = 0 Into Sum(x)
  • • すべてクエリー式を使わない形に変換可 能 クエリー式はシンタックスシュガー 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)
  • • VS 2008 のときの追加機能は LINQ のた め • 暗黙的な型指定(var、Dim) • 拡張メソッド • ラムダ式 • 匿名クラス • オブジェクト初期化子、コレクション初 期化子 LINQ のための言語サポート (1)
  • 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 コレクション初期化子 オブジェクト初期化子 拡張メソッド ラムダ式 匿名クラス
  • 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 コレクション初期化子 オブジェクト初期化子 拡張メソッド ラムダ式 匿名クラス
  • • 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);
  • • 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; } } }
  • • 最終的には for や foreach と同等 LINQ to Objects (3)
  • • 見た目は LINQ to Objects とほぼ同じ LINQ to SQL (1) var db = new NorthwindDataContext(); var q = from c in db.Customers where c.Country == “USA” select c.ContactName; var db = new NorthwindDataContext(); var q = db.Customers .Where(c => c.Country == “USA”) .Select(c => c.ContactName);
  • • テーブルとかは 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);
  • • Expression って? – 型(int や string と同じく一級市民の型) – System.Linq.Expressions.Expression<TDeledate> クラスの こと • 実行コードをデータとして表現したもの • 暗黙の型変換 – ラムダ式は暗黙に Expression 型に変換できる – 1 を 1.0 に暗黙に変換できるように “x => x % 2 == 0” をこのラムダ式の内容を表す Expression 型に変換できる LINQ to SQL (3)
  • • コンパイル時にすること – ラムダ式を Expression 型に変換するコード を作り出す • 実行時(列挙したとき)にすること – Expression 型を元に SQL 文を作ったりして 実行 LINQ to SQL (4)
  • • 非同期やイベントドリブンなものを LINQ っぽく扱えるようにするもの – GPS の位置情報がやってくるのを処理すると か – Leap Motion からやってくるデータを処理す るとか Reactive Extensions (Rx)