choi linq

32
わんくま同盟 http://www.wankuma.com/ 業務に役立つちょいLINQ まさる@わんくま同盟 http://blogs.wankuma.com/masaru/

Upload: sho-takano

Post on 28-May-2015

2.086 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Choi LINQ

わんくま同盟 http://www.wankuma.com/

業務に役立つちょいLINQ

まさる@わんくま同盟

http://blogs.wankuma.com/masaru/

Page 2: Choi LINQ

わんくま同盟 http://www.wankuma.com/

自己紹介

• ハンドル まさる

• 性別 見ての通り♂

• 職業 SE兼プログラマ(業務ではVB、趣味ではC#がメイン)

• 趣味

– 楽器演奏 バスクラリネット

– 読書

• 小説

• 技術書

• ビジネス書

Page 3: Choi LINQ

わんくま同盟 http://www.wankuma.com/

詳しくは…

まさるblogでググってくださいませ

<(_ _)>

Page 4: Choi LINQ

わんくま同盟 http://www.wankuma.com/

今日は・・・

昨年リリースされた.NET Framework 3.5

その目玉機能であるLINQですが、

新たな概念のため

有効に活用されていません

そんなLINQを実例を交えて紹介します

Page 5: Choi LINQ

わんくま同盟 http://www.wankuma.com/

なお・・・

今回はC#の例を紹介します!

VBでもそんなに変わらないので

気後れしなくていいですよ

v(^ ^)v

Page 6: Choi LINQ

わんくま同盟 http://www.wankuma.com/

Agenda

• LINQとは?

• LINQの基本

• 便利なLINQ

Page 7: Choi LINQ

わんくま同盟 http://www.wankuma.com/

LINQとは?

Page 8: Choi LINQ

わんくま同盟 http://www.wankuma.com/

LINQとは?

• LINQ (Language Integrated Query)

日本語訳:統合言語クエリ

– C#、VBなどのプログラミング言語に統合され

た、あらゆるデータを同様の構文で問い合わせ(クエリ)を行う方法

– .NET Framework 3.5に組み込まれた

最強の機能

Page 9: Choi LINQ

わんくま同盟 http://www.wankuma.com/

LINQとは?

• LINQの機能

– 様々なデータ集合に対して、以下のような操作を行う

• フィルタリング

• 列挙

• 射影

• etc…

Page 10: Choi LINQ

わんくま同盟 http://www.wankuma.com/

LINQとは?

• LINQの種類

– LINQ to Object

– LINQ to DataSet

– LINQ to XML

– LINQ to SQL

– LINQ to Entity

Page 11: Choi LINQ

わんくま同盟 http://www.wankuma.com/

LINQとは?

• LINQ to Object

– 様々なコレクションの変数に対するクエリ

• 配列、リスト、など

– 具体的には、IEnumerable<T>インターフェイスを実装する型ならなんでも可能

• IEnumerable<T>の機能は列挙すること

• つまり列挙できるものなら何でも可能ということ

Page 12: Choi LINQ

わんくま同盟 http://www.wankuma.com/

LINQの基本

Page 13: Choi LINQ

わんくま同盟 http://www.wankuma.com/

LINQの基本

• クエリ構文

– SQLのようなクエリ式でデータを操作

※この例での結果はIEnumerable<string>

int[] values = { 1, 2, 3, 4, 5 };var q = from value in values

where value < 4select String.Format("{0:D6}", value);

foreach (var value in q)Console.WriteLine(value);

Page 14: Choi LINQ

わんくま同盟 http://www.wankuma.com/

LINQの基本

• クエリ構文

– 実行結果

Page 15: Choi LINQ

わんくま同盟 http://www.wankuma.com/

LINQの基本

• メソッド構文

– メソッドチェーンでクエリを構築

※「value => ~」はラムダ式

int[] values = { 1, 2, 3, 4, 5 };var q = from values.Where(value => value < 4)

.Select(value =>String.Format("{0:D6}", value))

;foreach (var value in q)

Console.WriteLine(value);

Page 16: Choi LINQ

わんくま同盟 http://www.wankuma.com/

LINQの基本

• メソッド構文

– WhereメソッドやSelectメソッドの正体は、System.Linq名前空間に定義された、IEnumerable<T>の拡張メソッド

– クエリ式はこのメソッド構文のSyntax Sugar

LINQはこのメソッド群を

いかに上手く使うかが勝負

Page 17: Choi LINQ

わんくま同盟 http://www.wankuma.com/

LINQの基本

• クエリ構文とメソッド構文の使い分け

– クエリ構文

• 条件指定、並べ替えなど複合的に行う場合

• 1つの条件でフィルタリングするだけなら、メソッド構文の方が単純

– メソッド構文

• 単一のメソッドで終わるような場合

• 同じラムダ式を複数回書くのが面倒

Page 18: Choi LINQ

わんくま同盟 http://www.wankuma.com/

LINQの基本

• クエリ構文とメソッド構文の使い分け

var q = values.Where(value => value < 4 & value % 3 == 0).OrderByDescending(value => value).Select(value =>

String.Format("{0:D6}", value));

var q = from value in valueswhere value < 4 & value % 3 == 0orderby value descendingselect String.Format("{0:D6}", value);

Page 19: Choi LINQ

わんくま同盟 http://www.wankuma.com/

LINQの基本

• クエリ構文とメソッド構文の使い分け

var q = values.Where(value => value < 4);

var q = from value in valueswhere value < 4select value;

Page 20: Choi LINQ

わんくま同盟 http://www.wankuma.com/

LINQの基本

• LINQで気を付けること

– LINQの中身はあくまで値の列挙とその操作、つまりforeach

– あまり使いすぎるとパフォーマンス悪化の可能性

用法、用量を守って

正しくお使いください

Page 21: Choi LINQ

わんくま同盟 http://www.wankuma.com/

便利なLINQ

Page 22: Choi LINQ

わんくま同盟 http://www.wankuma.com/

便利なLINQ

• Whereメソッド

– コレクションのフィルタリングを行う

var values = Enumerable.Range(1, 20);

var q = values.Where(value => value % 3 == 0);

Page 23: Choi LINQ

わんくま同盟 http://www.wankuma.com/

便利なLINQ

• Any、Allメソッド

– コレクションの項目のいずれか(Any)、もしくは全て(All)が条件を満たすか判定

デモで従来の方法と比較します

string[] values = { "hoge", "foo“, "bar", "piyo", "fuga" };

bool any = values.Any(value =>value.StartWith("h")); // true

bool all = values.All(value =>value.StartWith("h")); // false

Page 24: Choi LINQ

わんくま同盟 http://www.wankuma.com/

便利なLINQ

• Sum、Average、Max、Minメソッド

– コレクションの値の総和(Sum)、平均(Average)、最大値(Max)、最小値(Min)を求める

デモで従来の方法と比較します

var values = Enumerable.Range(1, 20);

var sum = values.Sum();var avg = values.Average();var max = values.Max();var min = values.Min();

Page 25: Choi LINQ

わんくま同盟 http://www.wankuma.com/

便利なLINQ

• OrdayBy、OrderByDescendingメソッド

– コレクションを並び替えて取得する

デモで従来の方法と比較します

var values = new Person[] {new Person{ Name="Taro", Age=23 }, new Person{ Name="Jiro", Age=17 }, new Person{ Name="Hanako", Age=21 }, new Person{ Name="Kaoru", Age=15 }

};

var orderByName = values.OrderBy(value => value.Name);

var orderByAgeDescending = values.OrderByDescending(value => value.Age);

Page 26: Choi LINQ

わんくま同盟 http://www.wankuma.com/

便利なLINQ

• Reverseメソッド

– コレクションを逆順に取得する

デモで従来の方法と比較します

var values = Enumerable.Range(1, 20);

var reverseValues = values.Reverse();

Page 27: Choi LINQ

わんくま同盟 http://www.wankuma.com/

便利なLINQ

• GroupByメソッド

– コレクションをグルーピングする

デモで従来の方法と比較します

var values = new Sales[] { new Sales { ProductId = 1, SalesQty = 10 }, ~ };

var groupedValues = values.GroupBy(value => value.ProductId);

foreach (var group in groupedValues){Console.WriteLine("■ProductId : {0}", group.Key);int TotalSalesQty = group.Sum(value => value.SalesQty);foreach(var value in group){Console.WriteLine(value);

}}

Page 28: Choi LINQ

わんくま同盟 http://www.wankuma.com/

便利なLINQ

• ToArray、ToList、To~メソッド

– コレクションをTo~で指定された型に変換する

デモで従来の方法と比較します

var values = Enumerable.Range(1, 20);

List<int> intList = values.ToList();int[] intArray = values.ToArray();

Page 29: Choi LINQ

わんくま同盟 http://www.wankuma.com/

まとめ

Page 30: Choi LINQ

わんくま同盟 http://www.wankuma.com/

まとめ

• LINQにはクエリ構文、メソッド構文があり、適宜使い分ける

• LINQの中身はforeach

• LINQを使うことで、従来よりも遥かに短いコードで、しかもわかりやすくコレクションを扱える

そして何よりも・・・

Page 31: Choi LINQ

わんくま同盟 http://www.wankuma.com/

LINQ 超便利!ぜひ使うべき!

Page 32: Choi LINQ

わんくま同盟 http://www.wankuma.com/

おしまい!

ご静聴ありがとうございました<(_ _)>