超linq入門 実践編
DESCRIPTION
第2回LINQ勉強会用 資料TRANSCRIPT
超 LINQ 入門 実践編road to Linqulien
どのように実現されているか?
何処に使えるのか?
前回を踏まえて
何時?◦いまでしょう(違
何処で?◦データ構造の加工・変換
例えば DBから取得したデータをビジネスロジックで処理用に WebAPIから取得したデータを画面表示用に ファイルから読み込んだ CSVを集計する
◦データの生成 テストデータとか
LINQ の使いどころ
Select◦変換ルール Func<T,U>を引数にとり、 IEnumerable<T>を IEnumerable<U>に変換する
◦順序を指定できるオーバーロードがある
よく使うメソッド①
射影元 射影先
赤くする
SelectMany◦各要素を IEnumerable<T>に射影し、シーケンスを平準化。する
よく使うメソッド②
一つのシーケンスに
Where◦抽出条件 Func<T,bool>を引数にとり、 IEnumerable<T>の中から条件に合うもののみ抽出する
◦順序を指定できるオーバーロードがある
よく使うメソッド③
選択元 選択先
三角か?
ひとつだけ◦ First / FirstOrDefault : 最初の◦ Last / LastOrDefalut : 最後の◦ Single / SingleOrDefualt : 複数あれば例外
条件に一致する限り、◦ TakeWhile : 条件に一致する限り取得◦ SkipWhile : 条件に一致する限りスキップ
個数指定で選択◦ Skip : 指定個飛ばす◦ Take : 指定個取得する
よく使うメソッド④
2つ以上の集合同士の結合など◦ Zip : マージ
1番目同士、 2番目同士…の組を作る◦ Union : 和集合
重複は除外される◦ Concat : 連結
単なる連結◦ Join : 結合
SQLの LeftJoinのような感じ◦ GroupJoin : グループ化の後、結合
よく使うメソッド⑤
集計◦ Sum : 合計◦ Average : 平均◦ Count : 個数◦ Max : 最大◦ Min : 最少
判定◦ Any : 少なくとも 1つは
All : 全て
よく使うメソッド⑥
Aggregate◦畳み込みをおこなう
よく使うメソッド⑦
まず、1個目・2個目で結果作成
その結果と3個目で、再び結果
作成 最後まで繰り返して、結果を返
す
変換◦ ToList : List<T>への変換◦ ToArray : T[]への変換◦ ToDictionary : Dictionary<TKey, TValue>への変換
よく使うメソッド⑧ < 変換 >
順列作成◦ Range
繰り返し◦ Repeat
空◦ Empty
よく使うメソッド⑨
型変換◦ Cast : 各要素をキャストする◦ OfType : 型条件に合うもののみ選択する
グループ化◦ GroupBy : グループ化◦ ToLookUp : グループ化の後、インデックス作成
並び替え◦ OrderBy / OrderByDescending : 昇順・降順◦ ThenBy / ThenByDescending : 第2キー以降
よく使うメソッド⑩
オーバーロードを上手く利用しよう◦条件を満たす最初のものを取得
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
次のステップ
集合が、空かを確認する◦ × if (hoge.Count() == 0)◦ ○ if (!hoge.Any())
複数回実行を抑制する◦ ToArray/ToList での結果の確定
アンチパターン