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

LINQ の概要とかもろもろ

4,930

Published on

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

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
4,930
On Slideshare
0
From Embeds
0
Number of Embeds
23
Actions
Shares
0
Downloads
2
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

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)
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×