SlideShare uma empresa Scribd logo
1 de 32
Baixar para ler offline
業務に役立つちょいLINQ
        まさる@わんくま同盟
 http://blogs.wankuma.com/masaru/




    わんくま同盟 http://www.wankuma.com/
自己紹介

• ハンドル まさる
• 性別   見ての通り♂
• 職業   SE兼プログラマ
       (業務ではVB、趣味ではC#がメイン)
• 趣味
  – 楽器演奏   バスクラリネット
  – 読書
  • 小説
  • 技術書
  • ビジネス書

      わんくま同盟 http://www.wankuma.com/
詳しくは…




まさるblogでググってくださいませ
        <(_ _)>




   わんくま同盟 http://www.wankuma.com/
今日は・・・



昨年リリースされた.NET Framework 3.5
  その目玉機能であるLINQですが、
      新たな概念のため
    有効に活用されていません

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


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




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

 VBでもそんなに変わらないので
   気後れしなくていいですよ
       v(^ ^)v



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

• LINQとは?
• LINQの基本
• 便利なLINQ




       わんくま同盟 http://www.wankuma.com/
LINQとは?




わんくま同盟 http://www.wankuma.com/
LINQとは?

• LINQ (Language Integrated Query)
  日本語訳:統合言語クエリ
  – C#、VBなどのプログラミング言語に統合され
    た、あらゆるデータを同様の構文で問い合わ
    せ(クエリ)を行う方法
  – .NET Framework 3.5に組み込まれた


                最強
    の機能
           わんくま同盟 http://www.wankuma.com/
LINQとは?

• LINQの機能
 – 様々なデータ集合に対して、以下のような操
   作を行う
   • フィルタリング
   • 列挙
   • 射影
   • etc…




       わんくま同盟 http://www.wankuma.com/
LINQとは?

• LINQの種類
 –   LINQ to Object
 –   LINQ to DataSet
 –   LINQ to XML
 –   LINQ to SQL
 –   LINQ to Entity




             わんくま同盟 http://www.wankuma.com/
LINQとは?

• LINQ to Object
  – 様々なコレクションの変数に対するクエリ
    • 配列、リスト、など
  – 具体的には、IEnumerable<T>インターフェイ
    スを実装する型ならなんでも可能

    • IEnumerable<T>の機能は列挙すること
    • つまり列挙できるものなら何でも可能ということ




           わんくま同盟 http://www.wankuma.com/
LINQの基本




わんくま同盟 http://www.wankuma.com/
LINQの基本

• クエリ構文
  – SQLのようなクエリ式でデータを操作
int[] values = { 1, 2, 3, 4, 5 };
var q = from value in values
        where value < 4
        select String.Format(quot;{0:D6}quot;, value)
        ;
foreach (var value in q)
  Console.WriteLine(value);


  ※この例での結果はIEnumerable<string>
             わんくま同盟 http://www.wankuma.com/
LINQの基本

• クエリ構文
 – 実行結果




      わんくま同盟 http://www.wankuma.com/
LINQの基本

• メソッド構文
  – メソッドチェーンでクエリを構築
int[] values = { 1, 2, 3, 4, 5 };
var q = from values.Where(value => value < 4)
  .Select(value =>
    String.Format(quot;{0:D6}quot;, value))
  ;
foreach (var value in q)
  Console.WriteLine(value);

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

             わんくま同盟 http://www.wankuma.com/
LINQの基本

• メソッド構文
 – WhereメソッドやSelectメソッドの正体は、
   System.Linq名前空間に定義された、
   IEnumerable<T>の拡張メソッド
 – クエリ式はこのメソッド構文のSyntax Sugar


    LINQはこのメソッド群を
    いかに上手く使うかが勝負

       わんくま同盟 http://www.wankuma.com/
LINQの基本

• クエリ構文とメソッド構文の使い分け
 – クエリ構文
  • 条件指定、並べ替えなど複合的に行う場合
  • 1つの条件でフィルタリングするだけなら、メ
    ソッド構文の方が単純


 – メソッド構文
  • 単一のメソッドで終わるような場合
  • 同じラムダ式を複数回書くのが面倒



      わんくま同盟 http://www.wankuma.com/
LINQの基本

• クエリ構文とメソッド構文の使い分け
var q = from value in values
        where value < 4 & value % 3 == 0
        orderby value descending
        select String.Format(quot;{0:D6}quot;, value)
        ;
var q = values
        .Where(value => value < 4 & value % 3 == 0)
        .OrderByDescending(value => value)
        .Select(value =>
           String.Format(quot;{0:D6}quot;, value))
;
             わんくま同盟 http://www.wankuma.com/
LINQの基本

• クエリ構文とメソッド構文の使い分け
var q = from value in values
        where value < 4
        select value
        ;


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




             わんくま同盟 http://www.wankuma.com/
LINQの基本

• LINQで気を付けること
 – LINQの中身はあくまで値の列挙とその操作、
   つまりforeach
 – あまり使いすぎるとパフォーマンス悪化の可
   能性


      用法、用量を守って
     正しくお使いください

      わんくま同盟 http://www.wankuma.com/
便利なLINQ




わんくま同盟 http://www.wankuma.com/
便利なLINQ

• Whereメソッド
   – コレクションのフィルタリングを行う
var values = Enumerable.Range(1, 20);

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




                わんくま同盟 http://www.wankuma.com/
便利なLINQ

• Any、Allメソッド
   – コレクションの項目のいずれか(Any)、もし
     くは全て(All)が条件を満たすか判定
string[] values = { quot;hogequot;, quot;foo“
                          , quot;barquot;, quot;piyoquot;, quot;fugaquot; };

bool any = values.Any(value =>
                value.StartWith(quot;hquot;)); // true
bool all = values.All(value =>
                value.StartWith(quot;hquot;)); // false
         デモで従来の方法と比較します


                わんくま同盟 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();
                デモで従来の方法と比較します


                      わんくま同盟 http://www.wankuma.com/
便利なLINQ

• OrdayBy、OrderByDescendingメソッド
   – コレクションを並び替えて取得する
var values = new Person[] {
  new Person{ Name=quot;Taroquot;, Age=23 }
  , new Person{ Name=quot;Jiroquot;, Age=17 }
  , new Person{ Name=quot;Hanakoquot;, Age=21 }
  , new Person{ Name=quot;Kaoruquot;, Age=15 }
};
         デモで従来の方法と比較します
var orderByName = values
     .OrderBy(value => value.Name);

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

                わんくま同盟 http://www.wankuma.com/
便利なLINQ

• Reverseメソッド
   – コレクションを逆順に取得する
var values = Enumerable.Range(1, 20);

var reverseValues = values.Reverse();



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




                わんくま同盟 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(quot;■ProductId : {0}quot;, group.Key);
  int TotalSalesQty = group.Sum(value => value.SalesQty);
  foreach(var value in group)
  {
    Console.WriteLine(value);
  }
}               わんくま同盟 http://www.wankuma.com/
便利なLINQ

• ToArray、ToList、To~メソッド
   – コレクションをTo~で指定された型に変換す
     る
var values = Enumerable.Range(1, 20);

List<int> intList = values.ToList();
int[] intArray = values.ToArray();
         デモで従来の方法と比較します




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




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

• LINQにはクエリ構文、メソッド構文があり、
  適宜使い分ける
• LINQの中身はforeach
• LINQを使うことで、従来よりも遥かに短い
  コードで、しかもわかりやすくコレクショ
  ンを扱える

     そして何よりも・・・


      わんくま同盟 http://www.wankuma.com/
LINQ 超便利!
ぜひ使うべき!

 わんくま同盟 http://www.wankuma.com/
おしまい!

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



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

Mais conteúdo relacionado

Mais procurados

Hr 032 資訊系進路圖
Hr 032 資訊系進路圖Hr 032 資訊系進路圖
Hr 032 資訊系進路圖handbook
 
CEO-025 領導學綜合論
CEO-025 領導學綜合論CEO-025 領導學綜合論
CEO-025 領導學綜合論handbook
 
健身控食你必懂— Fun動享吃
健身控食你必懂— Fun動享吃健身控食你必懂— Fun動享吃
健身控食你必懂— Fun動享吃YOU SHENG CHEN
 
摩爾門經 / Alma 5 / 阿爾瑪書第五章
摩爾門經 / Alma 5 / 阿爾瑪書第五章摩爾門經 / Alma 5 / 阿爾瑪書第五章
摩爾門經 / Alma 5 / 阿爾瑪書第五章John Dye ( dyejo, inc. )
 
1242982622API2 upload
1242982622API2 upload1242982622API2 upload
1242982622API2 upload51 lecture
 
小社與東東的尋寶圖
小社與東東的尋寶圖小社與東東的尋寶圖
小社與東東的尋寶圖stps stps
 
手探りの私にもわかる気がしている関数型言語
手探りの私にもわかる気がしている関数型言語手探りの私にもわかる気がしている関数型言語
手探りの私にもわかる気がしている関数型言語mitsutaka mimura
 
Hyper Estraierの設計と実装
Hyper Estraierの設計と実装Hyper Estraierの設計と実装
Hyper Estraierの設計と実装Hiroshi Ono
 
Arc Ims Html Viewer Refrence
Arc Ims Html Viewer RefrenceArc Ims Html Viewer Refrence
Arc Ims Html Viewer Refrence贺 利华
 
DS-012-產品設計與製程選擇
DS-012-產品設計與製程選擇DS-012-產品設計與製程選擇
DS-012-產品設計與製程選擇handbook
 
宜大資工所簡介
宜大資工所簡介宜大資工所簡介
宜大資工所簡介Mu Chun Wang
 
HTML::AAFind in Yokohama.pm #4
HTML::AAFind in Yokohama.pm #4HTML::AAFind in Yokohama.pm #4
HTML::AAFind in Yokohama.pm #4Komoriya Kazunari
 
CEO-030-平衡計分卡之現在及未來發展方向
CEO-030-平衡計分卡之現在及未來發展方向CEO-030-平衡計分卡之現在及未來發展方向
CEO-030-平衡計分卡之現在及未來發展方向handbook
 
CEO-033-平衡計分卡與策略地圖
CEO-033-平衡計分卡與策略地圖CEO-033-平衡計分卡與策略地圖
CEO-033-平衡計分卡與策略地圖handbook
 
CEO-013-管理新七手法
CEO-013-管理新七手法CEO-013-管理新七手法
CEO-013-管理新七手法handbook
 
初探行为驱动开发(Bdd)
初探行为驱动开发(Bdd)初探行为驱动开发(Bdd)
初探行为驱动开发(Bdd)YuLei Liao
 

Mais procurados (20)

Hr 032 資訊系進路圖
Hr 032 資訊系進路圖Hr 032 資訊系進路圖
Hr 032 資訊系進路圖
 
CEO-025 領導學綜合論
CEO-025 領導學綜合論CEO-025 領導學綜合論
CEO-025 領導學綜合論
 
Alma 12
Alma 12Alma 12
Alma 12
 
健身控食你必懂— Fun動享吃
健身控食你必懂— Fun動享吃健身控食你必懂— Fun動享吃
健身控食你必懂— Fun動享吃
 
摩爾門經 / Alma 5 / 阿爾瑪書第五章
摩爾門經 / Alma 5 / 阿爾瑪書第五章摩爾門經 / Alma 5 / 阿爾瑪書第五章
摩爾門經 / Alma 5 / 阿爾瑪書第五章
 
1242982622API2 upload
1242982622API2 upload1242982622API2 upload
1242982622API2 upload
 
小社與東東的尋寶圖
小社與東東的尋寶圖小社與東東的尋寶圖
小社與東東的尋寶圖
 
手探りの私にもわかる気がしている関数型言語
手探りの私にもわかる気がしている関数型言語手探りの私にもわかる気がしている関数型言語
手探りの私にもわかる気がしている関数型言語
 
Hyper Estraierの設計と実装
Hyper Estraierの設計と実装Hyper Estraierの設計と実装
Hyper Estraierの設計と実装
 
Arc Ims Html Viewer Refrence
Arc Ims Html Viewer RefrenceArc Ims Html Viewer Refrence
Arc Ims Html Viewer Refrence
 
DS-012-產品設計與製程選擇
DS-012-產品設計與製程選擇DS-012-產品設計與製程選擇
DS-012-產品設計與製程選擇
 
宜大資工所簡介
宜大資工所簡介宜大資工所簡介
宜大資工所簡介
 
HTML::AAFind in Yokohama.pm #4
HTML::AAFind in Yokohama.pm #4HTML::AAFind in Yokohama.pm #4
HTML::AAFind in Yokohama.pm #4
 
CEO-030-平衡計分卡之現在及未來發展方向
CEO-030-平衡計分卡之現在及未來發展方向CEO-030-平衡計分卡之現在及未來發展方向
CEO-030-平衡計分卡之現在及未來發展方向
 
Regex Introduction
Regex IntroductionRegex Introduction
Regex Introduction
 
Km Final Rc
Km Final RcKm Final Rc
Km Final Rc
 
CEO-033-平衡計分卡與策略地圖
CEO-033-平衡計分卡與策略地圖CEO-033-平衡計分卡與策略地圖
CEO-033-平衡計分卡與策略地圖
 
摩賽亞書第二十七章 Mosiah 27
摩賽亞書第二十七章 Mosiah 27摩賽亞書第二十七章 Mosiah 27
摩賽亞書第二十七章 Mosiah 27
 
CEO-013-管理新七手法
CEO-013-管理新七手法CEO-013-管理新七手法
CEO-013-管理新七手法
 
初探行为驱动开发(Bdd)
初探行为驱动开发(Bdd)初探行为驱动开发(Bdd)
初探行为驱动开发(Bdd)
 

Mais de 将 高野

新入社員研修の作り方 〜完全版〜 by @masaru_b_cl #nds57
新入社員研修の作り方 〜完全版〜 by @masaru_b_cl #nds57新入社員研修の作り方 〜完全版〜 by @masaru_b_cl #nds57
新入社員研修の作り方 〜完全版〜 by @masaru_b_cl #nds57将 高野
 
新しい世界の学び方 by @masaru_b_cl #nds55
新しい世界の学び方 by @masaru_b_cl #nds55新しい世界の学び方 by @masaru_b_cl #nds55
新しい世界の学び方 by @masaru_b_cl #nds55将 高野
 
C#でアプリを作ってみよう! #ngtnet
C#でアプリを作ってみよう! #ngtnetC#でアプリを作ってみよう! #ngtnet
C#でアプリを作ってみよう! #ngtnet将 高野
 
Let's LINQing! - C#におけるデータ処理 - by @masaru_b_cl #nds51
Let's LINQing! - C#におけるデータ処理 - by @masaru_b_cl #nds51Let's LINQing! - C#におけるデータ処理 - by @masaru_b_cl #nds51
Let's LINQing! - C#におけるデータ処理 - by @masaru_b_cl #nds51将 高野
 
業務アプリケーション開発を支える.NET技術 #ngtnet
業務アプリケーション開発を支える.NET技術 #ngtnet業務アプリケーション開発を支える.NET技術 #ngtnet
業務アプリケーション開発を支える.NET技術 #ngtnet将 高野
 
仕事が捗る! Office & エディター操作入門 #nds40
仕事が捗る! Office & エディター操作入門 #nds40仕事が捗る! Office & エディター操作入門 #nds40
仕事が捗る! Office & エディター操作入門 #nds40将 高野
 
OWIN - .NETにおけるPSGI -
OWIN - .NETにおけるPSGI -OWIN - .NETにおけるPSGI -
OWIN - .NETにおけるPSGI -将 高野
 
設計(≒デザイン)の話をしよう #nds35
設計(≒デザイン)の話をしよう #nds35設計(≒デザイン)の話をしよう #nds35
設計(≒デザイン)の話をしよう #nds35将 高野
 
Lightweight C#
Lightweight C#Lightweight C#
Lightweight C#将 高野
 
はじめてのReleaseブランチ運用(svn編)
はじめてのReleaseブランチ運用(svn編)はじめてのReleaseブランチ運用(svn編)
はじめてのReleaseブランチ運用(svn編)将 高野
 
Tddのすゝめ
TddのすゝめTddのすゝめ
Tddのすゝめ将 高野
 
効率10倍UP 秀丸IDE化法
効率10倍UP 秀丸IDE化法効率10倍UP 秀丸IDE化法
効率10倍UP 秀丸IDE化法将 高野
 
Hello ".NET" World
Hello ".NET" WorldHello ".NET" World
Hello ".NET" World将 高野
 

Mais de 将 高野 (15)

新入社員研修の作り方 〜完全版〜 by @masaru_b_cl #nds57
新入社員研修の作り方 〜完全版〜 by @masaru_b_cl #nds57新入社員研修の作り方 〜完全版〜 by @masaru_b_cl #nds57
新入社員研修の作り方 〜完全版〜 by @masaru_b_cl #nds57
 
新しい世界の学び方 by @masaru_b_cl #nds55
新しい世界の学び方 by @masaru_b_cl #nds55新しい世界の学び方 by @masaru_b_cl #nds55
新しい世界の学び方 by @masaru_b_cl #nds55
 
C#でアプリを作ってみよう! #ngtnet
C#でアプリを作ってみよう! #ngtnetC#でアプリを作ってみよう! #ngtnet
C#でアプリを作ってみよう! #ngtnet
 
Let's LINQing! - C#におけるデータ処理 - by @masaru_b_cl #nds51
Let's LINQing! - C#におけるデータ処理 - by @masaru_b_cl #nds51Let's LINQing! - C#におけるデータ処理 - by @masaru_b_cl #nds51
Let's LINQing! - C#におけるデータ処理 - by @masaru_b_cl #nds51
 
業務アプリケーション開発を支える.NET技術 #ngtnet
業務アプリケーション開発を支える.NET技術 #ngtnet業務アプリケーション開発を支える.NET技術 #ngtnet
業務アプリケーション開発を支える.NET技術 #ngtnet
 
仕事が捗る! Office & エディター操作入門 #nds40
仕事が捗る! Office & エディター操作入門 #nds40仕事が捗る! Office & エディター操作入門 #nds40
仕事が捗る! Office & エディター操作入門 #nds40
 
OWIN - .NETにおけるPSGI -
OWIN - .NETにおけるPSGI -OWIN - .NETにおけるPSGI -
OWIN - .NETにおけるPSGI -
 
設計(≒デザイン)の話をしよう #nds35
設計(≒デザイン)の話をしよう #nds35設計(≒デザイン)の話をしよう #nds35
設計(≒デザイン)の話をしよう #nds35
 
Lightweight C#
Lightweight C#Lightweight C#
Lightweight C#
 
はじめてのReleaseブランチ運用(svn編)
はじめてのReleaseブランチ運用(svn編)はじめてのReleaseブランチ運用(svn編)
はじめてのReleaseブランチ運用(svn編)
 
git-svn
git-svngit-svn
git-svn
 
GTD on RTM
GTD on RTMGTD on RTM
GTD on RTM
 
Tddのすゝめ
TddのすゝめTddのすゝめ
Tddのすゝめ
 
効率10倍UP 秀丸IDE化法
効率10倍UP 秀丸IDE化法効率10倍UP 秀丸IDE化法
効率10倍UP 秀丸IDE化法
 
Hello ".NET" World
Hello ".NET" WorldHello ".NET" World
Hello ".NET" World
 

Choi LINQ

  • 1. 業務に役立つちょいLINQ まさる@わんくま同盟 http://blogs.wankuma.com/masaru/ わんくま同盟 http://www.wankuma.com/
  • 2. 自己紹介 • ハンドル まさる • 性別 見ての通り♂ • 職業 SE兼プログラマ (業務ではVB、趣味ではC#がメイン) • 趣味 – 楽器演奏 バスクラリネット – 読書 • 小説 • 技術書 • ビジネス書 わんくま同盟 http://www.wankuma.com/
  • 3. 詳しくは… まさるblogでググってくださいませ <(_ _)> わんくま同盟 http://www.wankuma.com/
  • 4. 今日は・・・ 昨年リリースされた.NET Framework 3.5 その目玉機能であるLINQですが、 新たな概念のため 有効に活用されていません そんなLINQを実例を交えて紹介します わんくま同盟 http://www.wankuma.com/
  • 5. なお・・・ 今回はC#の例を紹介します! VBでもそんなに変わらないので 気後れしなくていいですよ v(^ ^)v わんくま同盟 http://www.wankuma.com/
  • 6. Agenda • LINQとは? • LINQの基本 • 便利なLINQ わんくま同盟 http://www.wankuma.com/
  • 8. LINQとは? • LINQ (Language Integrated Query) 日本語訳:統合言語クエリ – C#、VBなどのプログラミング言語に統合され た、あらゆるデータを同様の構文で問い合わ せ(クエリ)を行う方法 – .NET Framework 3.5に組み込まれた 最強 の機能 わんくま同盟 http://www.wankuma.com/
  • 9. LINQとは? • LINQの機能 – 様々なデータ集合に対して、以下のような操 作を行う • フィルタリング • 列挙 • 射影 • etc… わんくま同盟 http://www.wankuma.com/
  • 10. LINQとは? • LINQの種類 – LINQ to Object – LINQ to DataSet – LINQ to XML – LINQ to SQL – LINQ to Entity わんくま同盟 http://www.wankuma.com/
  • 11. LINQとは? • LINQ to Object – 様々なコレクションの変数に対するクエリ • 配列、リスト、など – 具体的には、IEnumerable<T>インターフェイ スを実装する型ならなんでも可能 • IEnumerable<T>の機能は列挙すること • つまり列挙できるものなら何でも可能ということ わんくま同盟 http://www.wankuma.com/
  • 13. LINQの基本 • クエリ構文 – SQLのようなクエリ式でデータを操作 int[] values = { 1, 2, 3, 4, 5 }; var q = from value in values where value < 4 select String.Format(quot;{0:D6}quot;, value) ; foreach (var value in q) Console.WriteLine(value); ※この例での結果はIEnumerable<string> わんくま同盟 http://www.wankuma.com/
  • 14. LINQの基本 • クエリ構文 – 実行結果 わんくま同盟 http://www.wankuma.com/
  • 15. LINQの基本 • メソッド構文 – メソッドチェーンでクエリを構築 int[] values = { 1, 2, 3, 4, 5 }; var q = from values.Where(value => value < 4) .Select(value => String.Format(quot;{0:D6}quot;, value)) ; foreach (var value in q) Console.WriteLine(value); ※「value => ~」はラムダ式 わんくま同盟 http://www.wankuma.com/
  • 16. LINQの基本 • メソッド構文 – WhereメソッドやSelectメソッドの正体は、 System.Linq名前空間に定義された、 IEnumerable<T>の拡張メソッド – クエリ式はこのメソッド構文のSyntax Sugar LINQはこのメソッド群を いかに上手く使うかが勝負 わんくま同盟 http://www.wankuma.com/
  • 17. LINQの基本 • クエリ構文とメソッド構文の使い分け – クエリ構文 • 条件指定、並べ替えなど複合的に行う場合 • 1つの条件でフィルタリングするだけなら、メ ソッド構文の方が単純 – メソッド構文 • 単一のメソッドで終わるような場合 • 同じラムダ式を複数回書くのが面倒 わんくま同盟 http://www.wankuma.com/
  • 18. LINQの基本 • クエリ構文とメソッド構文の使い分け var q = from value in values where value < 4 & value % 3 == 0 orderby value descending select String.Format(quot;{0:D6}quot;, value) ; var q = values .Where(value => value < 4 & value % 3 == 0) .OrderByDescending(value => value) .Select(value => String.Format(quot;{0:D6}quot;, value)) ; わんくま同盟 http://www.wankuma.com/
  • 19. LINQの基本 • クエリ構文とメソッド構文の使い分け var q = from value in values where value < 4 select value ; var q = values.Where(value => value < 4); わんくま同盟 http://www.wankuma.com/
  • 20. LINQの基本 • LINQで気を付けること – LINQの中身はあくまで値の列挙とその操作、 つまりforeach – あまり使いすぎるとパフォーマンス悪化の可 能性 用法、用量を守って 正しくお使いください わんくま同盟 http://www.wankuma.com/
  • 22. 便利なLINQ • Whereメソッド – コレクションのフィルタリングを行う var values = Enumerable.Range(1, 20); var q = values.Where(value => value % 3 == 0); わんくま同盟 http://www.wankuma.com/
  • 23. 便利なLINQ • Any、Allメソッド – コレクションの項目のいずれか(Any)、もし くは全て(All)が条件を満たすか判定 string[] values = { quot;hogequot;, quot;foo“ , quot;barquot;, quot;piyoquot;, quot;fugaquot; }; bool any = values.Any(value => value.StartWith(quot;hquot;)); // true bool all = values.All(value => value.StartWith(quot;hquot;)); // false デモで従来の方法と比較します わんくま同盟 http://www.wankuma.com/
  • 24. 便利な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(); デモで従来の方法と比較します わんくま同盟 http://www.wankuma.com/
  • 25. 便利なLINQ • OrdayBy、OrderByDescendingメソッド – コレクションを並び替えて取得する var values = new Person[] { new Person{ Name=quot;Taroquot;, Age=23 } , new Person{ Name=quot;Jiroquot;, Age=17 } , new Person{ Name=quot;Hanakoquot;, Age=21 } , new Person{ Name=quot;Kaoruquot;, Age=15 } }; デモで従来の方法と比較します var orderByName = values .OrderBy(value => value.Name); var orderByAgeDescending = values .OrderByDescending(value => value.Age); わんくま同盟 http://www.wankuma.com/
  • 26. 便利なLINQ • Reverseメソッド – コレクションを逆順に取得する var values = Enumerable.Range(1, 20); var reverseValues = values.Reverse(); デモで従来の方法と比較します わんくま同盟 http://www.wankuma.com/
  • 27. 便利な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(quot;■ProductId : {0}quot;, group.Key); int TotalSalesQty = group.Sum(value => value.SalesQty); foreach(var value in group) { Console.WriteLine(value); } } わんくま同盟 http://www.wankuma.com/
  • 28. 便利なLINQ • ToArray、ToList、To~メソッド – コレクションをTo~で指定された型に変換す る var values = Enumerable.Range(1, 20); List<int> intList = values.ToList(); int[] intArray = values.ToArray(); デモで従来の方法と比較します わんくま同盟 http://www.wankuma.com/
  • 30. まとめ • LINQにはクエリ構文、メソッド構文があり、 適宜使い分ける • LINQの中身はforeach • LINQを使うことで、従来よりも遥かに短い コードで、しかもわかりやすくコレクショ ンを扱える そして何よりも・・・ わんくま同盟 http://www.wankuma.com/
  • 32. おしまい! ご静聴ありがとうございました <(_ _)> わんくま同盟 http://www.wankuma.com/