超linq入門 実践編

15

Click here to load reader

Upload: yone64

Post on 28-May-2015

1.929 views

Category:

Documents


2 download

DESCRIPTION

第2回LINQ勉強会用 資料

TRANSCRIPT

Page 1: 超Linq入門 実践編

超 LINQ 入門 実践編road to Linqulien

Page 2: 超Linq入門 実践編

どのように実現されているか?

何処に使えるのか?

前回を踏まえて

Page 3: 超Linq入門 実践編

何時?◦いまでしょう(違

何処で?◦データ構造の加工・変換

例えば DBから取得したデータをビジネスロジックで処理用に WebAPIから取得したデータを画面表示用に ファイルから読み込んだ CSVを集計する

◦データの生成 テストデータとか

LINQ の使いどころ

Page 4: 超Linq入門 実践編

Select◦変換ルール Func<T,U>を引数にとり、 IEnumerable<T>を IEnumerable<U>に変換する

◦順序を指定できるオーバーロードがある

よく使うメソッド①

射影元 射影先

赤くする

Page 5: 超Linq入門 実践編

SelectMany◦各要素を IEnumerable<T>に射影し、シーケンスを平準化。する

よく使うメソッド②

一つのシーケンスに

Page 6: 超Linq入門 実践編

Where◦抽出条件 Func<T,bool>を引数にとり、 IEnumerable<T>の中から条件に合うもののみ抽出する

◦順序を指定できるオーバーロードがある

よく使うメソッド③

選択元 選択先

三角か?

Page 7: 超Linq入門 実践編

ひとつだけ◦ First / FirstOrDefault : 最初の◦ Last / LastOrDefalut : 最後の◦ Single / SingleOrDefualt : 複数あれば例外

条件に一致する限り、◦ TakeWhile : 条件に一致する限り取得◦ SkipWhile : 条件に一致する限りスキップ

個数指定で選択◦ Skip : 指定個飛ばす◦ Take : 指定個取得する

よく使うメソッド④

Page 8: 超Linq入門 実践編

2つ以上の集合同士の結合など◦ Zip : マージ

1番目同士、 2番目同士…の組を作る◦ Union : 和集合

重複は除外される◦ Concat : 連結

単なる連結◦ Join : 結合

SQLの LeftJoinのような感じ◦ GroupJoin : グループ化の後、結合

よく使うメソッド⑤

Page 9: 超Linq入門 実践編

集計◦ Sum : 合計◦ Average : 平均◦ Count : 個数◦ Max : 最大◦ Min : 最少

判定◦ Any : 少なくとも 1つは

All : 全て

よく使うメソッド⑥

Page 10: 超Linq入門 実践編

Aggregate◦畳み込みをおこなう

よく使うメソッド⑦

まず、1個目・2個目で結果作成

その結果と3個目で、再び結果

作成 最後まで繰り返して、結果を返

Page 11: 超Linq入門 実践編

変換◦ ToList : List<T>への変換◦ ToArray : T[]への変換◦ ToDictionary : Dictionary<TKey, TValue>への変換

よく使うメソッド⑧ < 変換 >

Page 12: 超Linq入門 実践編

順列作成◦ Range

繰り返し◦ Repeat

空◦ Empty

よく使うメソッド⑨

Page 13: 超Linq入門 実践編

型変換◦ Cast : 各要素をキャストする◦ OfType : 型条件に合うもののみ選択する

グループ化◦ GroupBy : グループ化◦ ToLookUp : グループ化の後、インデックス作成

並び替え◦ OrderBy / OrderByDescending : 昇順・降順◦ ThenBy / ThenByDescending : 第2キー以降

よく使うメソッド⑩

Page 14: 超Linq入門 実践編

オーバーロードを上手く利用しよう◦条件を満たす最初のものを取得

hoge.Where(pred).First() hoge.First(pred)

◦条件を満たす件数を取得 hoge.Where(pred).Count()

hoge.Count(pred)

◦ 2乗の和を取得 hoge.Select(x => x*x).Sum()

hoge.Sum(x => x*x)

並列処理を LINQで◦ PLINQ

AsParallel / AsOrdered

次のステップ

Page 15: 超Linq入門 実践編

集合が、空かを確認する◦ × if (hoge.Count() == 0)◦ ○ if (!hoge.Any())

複数回実行を抑制する◦ ToArray/ToList での結果の確定

アンチパターン