SlideShare ist ein Scribd-Unternehmen logo
1 von 69
Hokuriku.NET
C# LINQ入門
        2011/06/11
            小島 富治雄
         福井コンピュータ株式会社
Agenda
1. はじめに
2. C# のこれから
3. C#1.0 までで
   押さえておくこと
4. C#2.0 と 3.0 の新機能
5. Linq
1. はじめに
福井情報技術者協会

• http://fitea.org
• 福井のIT産業に関わる技術者の「横のつなが
  り」を支援するコミュニティ
 FITEAのミッション
  – 『私たちは、福井をソフトウェア大国にするべく積
    極的に活動を行い、福井の情報技術者を心豊か、ス
    キル豊か、フトコロ豊かにします』
 主な活動
  – 技術的なセミナーの誘致、自主開催、および技術者
    同士の交流会 (飲み会等) の開催
自己紹介
• 小島 富治雄
• 福井コンピュータ株式会社
• Microsoft MVP for Development Tools - Visual   C#

                        英会話            ジャグリング

                               マイブーム

                      自転車通勤               万年筆
自己紹介タイム

• 名前
• 所属や出身など
• C#で好きなところ
2. C# のこれから
Anders Hejlsberg
Anders Hejlsberg 談:
   C#の今後について
    2006/02/02 at 横浜
Q. 今後C#は、関数型言語として進化してい
  くのか?
A. Yes. C#3.0 や LINQ で導入された「ラム
  ダ式」などの機能は、Haskell や ML など
  の関数型言語に触発されたものだ。
  これらの機能は開発をもっと自由な形にす
  る。設計しているだけでワクワクするよう
  な機能だ。C# 3.0というのは、オブジェク
  ト指向言語と関数型言語の「ハッピーな結
  婚」といってよいものになるだろう。
Anders Hejlsberg 談:
    C#の今後について


Q. AOP (アスペクト指向プログラミング) 機
  能 (=オブジェクトに対して後付けで機能
  を挿入する仕組み) を提供する予定は?

A. AOP は、個人的には懐疑的。AOP が役立
  つ場面もあるが副作用もある。
  C# の機能 (属性や Partial Class) で代
  用できるケースも多い。
3. C#1.0までで
押さえておくこと
C#1.0までで
     押さえておくところ
• .NET らしい Cool な書き方
 –delegate と event
 –データバインド
 – 属性 (アノテーション)
例
• Demo
  –委譲による分割
    →MVC構造など
  –データバインド
    • 双方向依存
      → interface、delegate、event に
      よるデータバインド
データバインド                                                                        <<interface>>
                                                                             IEnumerable<T>




                                                                               <<interface>>
                        DrawingUI
                                                                             IDataSource<T>

                   + OnChanged() : void              DataSource     + <<event>> Changed : Action<T>


                                                                                          <<realize>>
interface IDrawable                                                                 Data
{
   void Draw();                                                     + <<event>> Changed : Action<T>
}                                                                   + 追加() : void

class DrawingUI<T> : UserControl where T : IDrawable
{                                                           interface IDataSource<T> : IEnumerable<T>
  IDataSource<T> dataSource = null;                         {
                                                               event Action<T> Changed;
    public IDataSource<T> DataSource                        }
    {
      set                                                   class Data<T> : IDataSource<T>
      {                                                     {
        dataSource = value;                                   List<T> list = new List<T>();
        value.Changed += OnChanged;
      }                                                         public event Action<T> Changed;
      private get { return dataSource; }
    }                                                           public void Add(T item)
                                                                {
    public void Draw()                                            list.Add(item);
    {                                                             if (Changed != null)
      if (DataSource != null)                                         Changed(item);
          DataSource.ForEach(item => item.Draw());              }
    }
                                                                public IEnumerator<T> GetEnumerator()
    void OnChanged(T item)                                      { return list.GetEnumerator(); }
    {
      item.Draw();                                              IEnumerator IEnumerable.GetEnumerator()
    }                                                           { return list.GetEnumerator(); }
}                                                           }
DrawingUI                  DataSource

        + OnChanged() : void                    IDataSource<T>

     - drawingUI                                           <<realize>>

                                                        Data
             Application       - data
                                        + <<event>> Changed : Action<T>
                                        + 追加() : void


drawingUI.DataSource = data;                         データバインド
例
• Demo
  –C#2.0、3.0 による進化
  –オブジェクトへの委譲 → メソッ
   ドへの委譲
    • class → delegate → 匿名メソッド
      (クロージャ) → ラムダ式
    • yield による継続
3. C#2.0 と 3.0
   の新機能
C#2.0
•   Generics
•   匿名メソッド
•   イテレータ (yield)
•   Partial Type
•   Nullable 型
•   アクセサのアクセスレベル
•   static クラス
•   namespace alias qualifier
•   extern alias
•   #pragma
•   Conditional 属性
•   固定長配列
•   デリゲートの Covariance/Contravariance
C#3.0
•   暗黙的型付け
•   パーシャルメソッド
•   自動プロパティ
•   オブジェクト イニシャライザ
•   コレクション イニシャライザ
•   暗黙型付け配列
•   匿名型 (Anonymous Types)
•   拡張メソッド
•   ラムダ式 (Lambda Expression)
•   LINQ
Demo
C#2.0と3.0の新機能について
・多くが
シンタックス シュガー
・当たり前だが、使わなくても
プログラムは書ける
C#2.0と3.0の新機能について
• A: 「C#3.0 の方が簡潔に意図を表現できる」
• B: 「でも C# 3.0 の文法がなくても、同じことは書ける。新たな文法
  を採用しなくても、要は、書ければなんでもいいのであって」
• A: 「それって、極端な言い方をすれば、アセンブリ言語があれば、他
  の言語は不要ってこと?」

• A: 「より意図をシンプルに書く方法ができたのなら、それは採用した
  いな」
• B: 「新しいものを取り入れるのにはリスクがある」
• A: 「『新しいものを取り入れない』リスクほどではないと思う」
• A: 「 ITエンジニアは、鮫みたいなもので、前に進むのを止めたら死ん
  でしまう」

• B: 「色々覚えるのは大変だ」
• A: 「確かに。でも、使わなきゃならなくなったわけではない。選択肢
  が増えただけ。今までのものを置き換えなきゃいけないわけでもない」
「きれいなコードは好きですか?」
~品質の高いソースコードを書くコツ~

 意図を表現編
C#2.0

C#3.0 への布石
•   Generics
•   匿名メソッド
•   イテレータ (yield)
•   static クラス
Generics
• C++ で言うところの template に似ている
• “型をパラメータに持つ型”を作る

class Stack<T>
{
    List<T> items = new List<T>();

    public void Push(T item)
    {
        items.Insert(0, item);
    }

    public T Pop()
    {
        T item = items[0];
        items.RemoveAt(0);
        return item;
    }
}



Demo:
匿名メソッド
• インラインにメソッドを記述
• ブロック スコープをデリゲートに
  (=クロージャ)
static void Sample3(string captionText)
{
    userInput.KeyInput += delegate(string inputText) {
            string text = “ユーザー入力: ";
            MessageBox.Show(text + inputText,
                                        captionText);
    };
}


Demo:
イテレータ (yield)
• Enumerable や IEnumerator インタフェース
  (foreach などに必要) を簡単に作成
class 自然数
{
    readonly int max = 1;

    public 自然数(int max)
    { this.max = max; }

    public IEnumerator<int> GetEnumerator()
    {
        for (int number = 1; number <= max; number++)
            yield return number;
    }
}

Demo:
C#3.0

• より簡潔に意図が記述
  できるようになった
• Linq がメイン
–ほとんどの新機能は Linq に通じ
 る
暗黙的型付け (var)
• 型がなくなるわけじゃない
• object で受けるのとは違う
  – インテリセンスが利く


var point = new { X=100, Y=200 };

Demo:
パーシャルメソッド
• メソッドの宣言と定義を分離
• 実装があれば実行、なければ何もしない
partial class PertialMethodSample
{
    static partial void DoSomething();

    static void Main(string[] args)
    {
        DoSomething();
    }
}

partial class PertialMethodSample
{
    static partial void DoSomething()
    {
        Console.WriteLine("DoSomething");
    }
}

Demo:
自動プロパティ
// 1.0~2.0
string name;

public string Name
{
    get { return name; }
    set { name = value; }
}

// 3.0
public string Name { get; set; }
オブジェクト イニシャライザ
• インスタンス化とプロパティ設定を一行で
// 1.0~2.0

// プロパティをひとつずつ設定
Point point = new Point();
point.X = 1;
point.Y = 2;

// またはコンストラクタを作成して
Point point = new Point(1, 2);


// 3.0
var point = new Point { X = 1, Y = 2 };
コレクション イニシャライザ
• ICollection<T> を配列感覚で初期化

// 1.0~2.0
List<Point> list = new   List<Point>();
list.Add(new Point(10,   20));
list.Add(new Point( 0,    0));
list.Add(new Point(30,   10));

// 3.0
var list = new List<Point> {
    new Point { X = 10, Y = 20 },
    new Point { X = 0, Y = 0 },
    new Point { X = 30, Y = 10 },
};
暗黙型付け配列
• new で配列を作成するときに型を
  省略

var array = new[] {1, 2, 3, 4};
匿名型 (Anonymous Types)
• 無名クラス

var book = new {
    タイトル = “C#3.0入門”,
    価格 = 2980
};
Console.WriteLine(book);
拡張メソッド
• 既存クラスにインスタンスメソッドを追加
public static void 回(this int 回数, Action やる)
{
    for (int カウント = 0; カウント < 回数; カウント
  ++)
        やる();
}

// 使い方
10.回(海に向かって叫ぶ);

Demo:
ラムダ式 (Lambda Expression)
• 匿名メソッドの発展形
Func<int, int, int> funcA = delegate(int x, int y) { return x +
   y; };
Func<int, int, int> funcL = (x, y) => x + y;

Action actionA = delegate { Console.WriteLine("Hello"); };
Action actionL = () => Console.WriteLine("Hello");

Console.WriteLine(funcA(1, 2));
Console.WriteLine(funcL(1, 2));
actionA();
actionL();


Demo:
5. Linq
Linq概要
• Linq
  Language-INtegrated Query
  (言語に統合されたクエリ)
Linq とは
• データの集合から簡単な記述で『必要なオブ
  ジェクト』の『必要なメンバ』のみを『必要と
  する順序』で取り出せるようにしたシンタック
  スシュガー
 – 開発者は抽出条件、抽出するメンバ、抽出順序に
   のみ関心を払う
 – 取り出すデータの型不要
 – 繰り返し文不要
var query = from     データ変数 in データの集合
              where 抽出条件
              orderby 抽出順序のキー項目
              select  抽出するメンバ で構成される新しいクラス;
Linq の種類
   C#                     VB                  その他の言語



                     .NET LINQ
LINQ to   LINQ to                  LINQ to
                     LINQ to SQL              LINQ to XML
Objects   Datasets                 Entities




 Object                                          XML
                      Data Base
データベース関連のLinq
               .NET LINQ
• データベース周りのLinq LINQ to
   LINQ to
              LINQ to SQL
   DataSets                   Entities


               ADO.NET
    Dataset                  Entity Client
              Data Context
     Table                      Entity
    Adapter                  Framework



               Data Base
Linq to Object
 •IEnumerable<T> なオブジェクトをクエリ


var bookList = new[] {
                new { タイトル = "C#入門"          , ISBNコード = "AAAAAAA", 価格 = 2980 },
                new { タイトル = "VB入門"          , ISBNコード = "BBBBBBB", 価格 = 3300 },
                new { タイトル = ".NET Framework", ISBNコード = "CCCCCCC", 価格 = 7800 }
            };

       var books = from aBook in bookList
                   where aBook.ISBNコード == "BBBBBBB"
                   select new { タイトル = aBook.タイトル, 価格 = aBook.価格 };
       books.ForEach(item => Console.WriteLine(item));
Linq to DataSet
•DataSet をクエリ

var ds = new DataSet();
testTableAdapter.Fill(ds);
var accounts = from aBook in ds.Book
               where aBook.ISBNコード == "BBBBBBB"
               select new { タイトル = aBook.タイト
  ル,
                                   価格        = aBook.
  価格 };
books.ForEach(item => Console.WriteLine(item));
Linq to SQL
•SQL Server のデータベースをクエリ

using (var db = new DataClasses1DataContext()) {
    var accounts = from aBook in db.Book
               where aBook.ISBNコード == "BBBBBBB"
               select new { タイトル = aBook.タイトル,
                                   価格        = aBook.価格 };
    books.ForEach(item => Console.WriteLine(item));
}
LINQ to SQL の特長
• 生成されるSQL文はパラメータクエ
  リ
• 追加/更新/削除時には自動的に
  トランザクションになる
 –DataContext.SubmitChanges()
 –Linq ではなく DataContext クラスの機
  能
Linq to SQL

   Demo
Linq to Entities
• Entity Framework による概念エ
  ンティティをクエリ
var accounts = from aBook in textContext.Book
       where aBook.ISBNコード == "BBBBBBB"
       select new { タイトル = aBook.タイトル,
                    価格       = aBook.価格 };
books.ForEach(item => Console.WriteLine(item));
Linq to XML
• XML の Xelement をクエリ
   – RSS の読み込みなどに便利
var xElement = XElement.Load("../../Books.xml");
    var books = from aBook in xElement.Elements()
               where aBook.Element("ISBNコード").Value == "BBBBBBB"
               select new
               {
                  タイトル = aBook.Attribute("タイトル").Value,
                  価格 = int.Parse(aBook.Element("価格").Value)
               };
    books.ForEach(item => Console.WriteLine(item));
Linq to XML

   Demo
ASP.NET での LINQ

• LinqDataSource コントロール
 –LINQ to SQLだけでなく各種オ
  ブジェクトが利用可能
Linq とは何か
IEnumerable<T> ベースのすべて
の情報ソースにクエリを適用する
技術
Linq とは何ではないか
「SQL が C# や VB で書けるよう
 になった」のではない
C#3.0とLinqの関係
• C#3.0の言語拡張の多くは Linq
  のため

Demo:
Linq の特長
• Expression Tree
 –IQueryable<T>


Demo:
クエリ式
• From 句からはじまる
• from、let、where、join、orderby
  を内部に記述
• Select 句または group 句で終わる

• add/update/deleteは仕様として存
  在しない
 – データを抽出することが目的
クエリ式
• where (抽出条件)
 – where book.タイトル.Contains(“.NET”)
 – where book.価格 < 2000
• orderby (抽出順序)
 – orderby book.タイトル
 – orderby book.価格 descending
 – orderby book.タイトル, book.価格
LINQの仕組み
• クエリ式はラムダ式を引数にとる拡張メソッドが
  連結された形式に変換される

var query = from book in bookse
           where book.タイトル.Contans(“C#”)
           orderby book.タイトル
           select new { book.タイトル, book.価格 };


var query = books.Where(book => book.タイトル.Contans(“C#”))
                    .OrderBy(book => book.タイトル)
                    .Select(book => new {book.タイトル,
                                         book.価格});
LINQの仕組み
• System.LINQ.Enumerable.XXX
  – LINQ to Object
     • 配列や List<T> などは IEnumerable から派生
  – LINQ to XML
     • Xelement.Decentants() が IEnumerable を返す
  – yieldによる実装 → 遅延実行
• System.LINQ.Queryable.XXX
  – LINQ to SQL
      • System.Data.Linq.Table<T> は IQueryable から派生
  – ラムダ式の右辺を積んで式のツリー(Expression
    Tree)を作成
  – IQuaryProviderによる実装 → 遅延実行
  – 継承して独自のLINQ to XXX といった仕組みを構築
    可能
LINQの仕組み
• 遅延実行
 – データが実際に必要となるタイミングまでクエ
   リ条件が積み重ねられる
       • LINQ to SQL では最終的にデータを参照するタイミン
         グ (DataBind 時など) にSQL文が生成される
 var query1 = from book in db.書籍
      orderby book.タイトル
      select new { 出版社名 = book.出版社.名前, 書籍タイトル = book.タイトル };
 var query2 = from book in query1
       where book.出版社名.Contains("C")
       select book;

 query2.ToList().ForEach(book => Console.WriteLine(book));



 SELECT [t1].[名前] AS [出版社名], [t0].[タイトル] AS [書籍タイトル]
 FROM [dbo].[書籍] AS [t0]
 LEFT OUTER JOIN [dbo].[出版社] AS [t1] ON [t1].[ID] = [t0].[出版社ID]
 WHERE [t1].[名前] LIKE @p0
 ORDER BY [t0].[タイトル]
LINQによる異種データの結合

• Object、XML、SQLをJOIN可
  能
 –IEnumerable ベースで結合
  • データベース連携の部分では
    全データを取り出してから必
    要なものを抽出
   –LINQ to SQLをIEnumerableベー
    スで処理
Linq と ADO.NET の関係
• ADO.NET の進化
 –ADO.NET   1.0
 –ADO.NET   2.0
 –ADO.NET   3.0
 –ADO.NET   3.5
ADO.NET
• 1.0
  –Transaction Script
    • SqlConnecion + SqlCommand
  –Table Module
    • SqlDataAdapter で
         DataSet や DataTable
ADO.NET
• 2.0
  –Table Module
    • SqlDataSource
    • ObjectDataSource で
        型付きDataSet と専用TableAdapter
ADO.NET
• 3.0
  –Domain Model
    • Linq to SQL で O-R マッピング

             データベース


                  オブジェクト
ADO.NET
• 3.5
  –Domain Model
    • Linq to Entities で O-R マッピング
  物理データモデル

    論理データモデル

        概念データモデル

         概念データクエリ
参考情報

– C#3.0の概要
 • http://www.microsoft.com/japan/msdn/net/bb308966.aspx
– LINQ:.NET統合言語クエリ
 • http://www.microsoft.com/japan/msdn/net/bb308959.aspx
– .NET標準クエリ演算子
 • http://www.microsoft.com/japan/msdn/net/bb394939.aspx
Hokuriku.NET Vol.7 in 福井
 2011年7月30日(土)
 13:30~19:00
 アオッサ6F 研修室601B
 (福井県福井市手寄1丁目4、JR福井駅から徒歩1分)
 参加費: 500円程度のカンパをお願いしています (学生の方は無料です)
 主催/共催: 北陸エンジニアグループ、福井情報技術者協会 (FITEA)
 内容:
  – マイクロソフトのエバンジェリストやMVPが来福。最新のマイクロソ
    フト技術を解説。
  – ライトニングトークスのトーカー募集中。
 詳細/申込先:
  – Hokuriku.NET Vol.7 in 福井 : ATND
    (http://atnd.org/events/16219) まで

Weitere ähnliche Inhalte

Was ist angesagt?

C# LINQ ~深く知って、使いまくろう~
C# LINQ ~深く知って、使いまくろう~C# LINQ ~深く知って、使いまくろう~
C# LINQ ~深く知って、使いまくろう~Fujio Kojima
 
BOF1-Scala02.pdf
BOF1-Scala02.pdfBOF1-Scala02.pdf
BOF1-Scala02.pdfHiroshi Ono
 
Chapter 6: Computing on the language (R Language Definition)
Chapter 6: Computing on the language (R Language Definition)Chapter 6: Computing on the language (R Language Definition)
Chapter 6: Computing on the language (R Language Definition)Nagi Teramo
 
“Design and Implementation of Generics for the .NET Common Language Runtime”他...
“Design and Implementation of Generics for the .NET Common Language Runtime”他...“Design and Implementation of Generics for the .NET Common Language Runtime”他...
“Design and Implementation of Generics for the .NET Common Language Runtime”他...Masahiro Sakai
 
オブジェクト指向入門5
オブジェクト指向入門5オブジェクト指向入門5
オブジェクト指向入門5Kenta Hattori
 
すごいHaskell楽しく学ぼう-第12章モノイド-
すごいHaskell楽しく学ぼう-第12章モノイド-すごいHaskell楽しく学ぼう-第12章モノイド-
すごいHaskell楽しく学ぼう-第12章モノイド-Hiromasa Ohashi
 
たのしい高階関数
たのしい高階関数たのしい高階関数
たのしい高階関数Shinichi Kozake
 
What Dotty fixes @ Scala関西サミット
What Dotty fixes @ Scala関西サミットWhat Dotty fixes @ Scala関西サミット
What Dotty fixes @ Scala関西サミットTaisuke Oe
 
20141128 iOSチーム勉強会 My Sweet Swift
20141128 iOSチーム勉強会 My Sweet Swift20141128 iOSチーム勉強会 My Sweet Swift
20141128 iOSチーム勉強会 My Sweet Swiftnecocen
 
[Basic 3] 計算量 / 配列, 連結リスト / ハッシュ テーブル / スタック, キュー
[Basic 3] 計算量 / 配列, 連結リスト / ハッシュ テーブル / スタック, キュー[Basic 3] 計算量 / 配列, 連結リスト / ハッシュ テーブル / スタック, キュー
[Basic 3] 計算量 / 配列, 連結リスト / ハッシュ テーブル / スタック, キューYuto Takei
 
C++ lecture-2
C++ lecture-2C++ lecture-2
C++ lecture-2sunaemon
 
C#を始めたばかりの人へのLINQ to Objects
C#を始めたばかりの人へのLINQ to ObjectsC#を始めたばかりの人へのLINQ to Objects
C#を始めたばかりの人へのLINQ to ObjectsFumitaka Yamada
 
Ekmett勉強会発表資料
Ekmett勉強会発表資料Ekmett勉強会発表資料
Ekmett勉強会発表資料時響 逢坂
 
Java SE 7 InvokeDynamic in JRuby
Java SE 7 InvokeDynamic in JRubyJava SE 7 InvokeDynamic in JRuby
Java SE 7 InvokeDynamic in JRubyHiroshi Nakamura
 
C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020
C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020
C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020Fujio Kojima
 
Java電卓勉強会資料
Java電卓勉強会資料Java電卓勉強会資料
Java電卓勉強会資料Toshio Ehara
 

Was ist angesagt? (20)

C# LINQ ~深く知って、使いまくろう~
C# LINQ ~深く知って、使いまくろう~C# LINQ ~深く知って、使いまくろう~
C# LINQ ~深く知って、使いまくろう~
 
関数
関数関数
関数
 
Scala with DDD
Scala with DDDScala with DDD
Scala with DDD
 
BOF1-Scala02.pdf
BOF1-Scala02.pdfBOF1-Scala02.pdf
BOF1-Scala02.pdf
 
Actor&stm
Actor&stmActor&stm
Actor&stm
 
Chapter 6: Computing on the language (R Language Definition)
Chapter 6: Computing on the language (R Language Definition)Chapter 6: Computing on the language (R Language Definition)
Chapter 6: Computing on the language (R Language Definition)
 
“Design and Implementation of Generics for the .NET Common Language Runtime”他...
“Design and Implementation of Generics for the .NET Common Language Runtime”他...“Design and Implementation of Generics for the .NET Common Language Runtime”他...
“Design and Implementation of Generics for the .NET Common Language Runtime”他...
 
オブジェクト指向入門5
オブジェクト指向入門5オブジェクト指向入門5
オブジェクト指向入門5
 
すごいHaskell楽しく学ぼう-第12章モノイド-
すごいHaskell楽しく学ぼう-第12章モノイド-すごいHaskell楽しく学ぼう-第12章モノイド-
すごいHaskell楽しく学ぼう-第12章モノイド-
 
たのしい高階関数
たのしい高階関数たのしい高階関数
たのしい高階関数
 
What Dotty fixes @ Scala関西サミット
What Dotty fixes @ Scala関西サミットWhat Dotty fixes @ Scala関西サミット
What Dotty fixes @ Scala関西サミット
 
20141128 iOSチーム勉強会 My Sweet Swift
20141128 iOSチーム勉強会 My Sweet Swift20141128 iOSチーム勉強会 My Sweet Swift
20141128 iOSチーム勉強会 My Sweet Swift
 
[Basic 3] 計算量 / 配列, 連結リスト / ハッシュ テーブル / スタック, キュー
[Basic 3] 計算量 / 配列, 連結リスト / ハッシュ テーブル / スタック, キュー[Basic 3] 計算量 / 配列, 連結リスト / ハッシュ テーブル / スタック, キュー
[Basic 3] 計算量 / 配列, 連結リスト / ハッシュ テーブル / スタック, キュー
 
C++ lecture-2
C++ lecture-2C++ lecture-2
C++ lecture-2
 
C#を始めたばかりの人へのLINQ to Objects
C#を始めたばかりの人へのLINQ to ObjectsC#を始めたばかりの人へのLINQ to Objects
C#を始めたばかりの人へのLINQ to Objects
 
Thinking in Cats
Thinking in CatsThinking in Cats
Thinking in Cats
 
Ekmett勉強会発表資料
Ekmett勉強会発表資料Ekmett勉強会発表資料
Ekmett勉強会発表資料
 
Java SE 7 InvokeDynamic in JRuby
Java SE 7 InvokeDynamic in JRubyJava SE 7 InvokeDynamic in JRuby
Java SE 7 InvokeDynamic in JRuby
 
C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020
C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020
C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020
 
Java電卓勉強会資料
Java電卓勉強会資料Java電卓勉強会資料
Java電卓勉強会資料
 

Ähnlich wie C# LINQ入門

C++0x in programming competition
C++0x in programming competitionC++0x in programming competition
C++0x in programming competitionyak1ex
 
ぱっと見でわかるC++11
ぱっと見でわかるC++11ぱっと見でわかるC++11
ぱっと見でわかるC++11えぴ 福田
 
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例Yoshifumi Kawai
 
C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~
C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~
C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~Fujio Kojima
 
C#勉強会 ~ C#9の新機能 ~
C#勉強会 ~ C#9の新機能 ~C#勉強会 ~ C#9の新機能 ~
C#勉強会 ~ C#9の新機能 ~Fujio Kojima
 
C++0x 言語の未来を語る
C++0x 言語の未来を語るC++0x 言語の未来を語る
C++0x 言語の未来を語るAkira Takahashi
 
復習も兼ねて!C#6.0-7.0
復習も兼ねて!C#6.0-7.0復習も兼ねて!C#6.0-7.0
復習も兼ねて!C#6.0-7.0Yuta Matsumura
 
TypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービューTypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービューAkira Inoue
 
PythonによるDeep Learningの実装
PythonによるDeep Learningの実装PythonによるDeep Learningの実装
PythonによるDeep Learningの実装Shinya Akiba
 
NumPyが物足りない人へのCython入門
NumPyが物足りない人へのCython入門NumPyが物足りない人へのCython入門
NumPyが物足りない人へのCython入門Shiqiao Du
 
Entity Framework 5.0 deep dive
Entity Framework 5.0 deep diveEntity Framework 5.0 deep dive
Entity Framework 5.0 deep diveAtsushi Fukui
 
Cython intro prelerease
Cython intro prelereaseCython intro prelerease
Cython intro prelereaseShiqiao Du
 

Ähnlich wie C# LINQ入門 (20)

C++0x in programming competition
C++0x in programming competitionC++0x in programming competition
C++0x in programming competition
 
ぱっと見でわかるC++11
ぱっと見でわかるC++11ぱっと見でわかるC++11
ぱっと見でわかるC++11
 
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
 
Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7
 
What is template
What is templateWhat is template
What is template
 
C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~
C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~
C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~
 
Teclab3
Teclab3Teclab3
Teclab3
 
C#勉強会 ~ C#9の新機能 ~
C#勉強会 ~ C#9の新機能 ~C#勉強会 ~ C#9の新機能 ~
C#勉強会 ~ C#9の新機能 ~
 
Boost17 cpplinq
Boost17 cpplinqBoost17 cpplinq
Boost17 cpplinq
 
C++0x 言語の未来を語る
C++0x 言語の未来を語るC++0x 言語の未来を語る
C++0x 言語の未来を語る
 
C# 9.0 / .NET 5.0
C# 9.0 / .NET 5.0C# 9.0 / .NET 5.0
C# 9.0 / .NET 5.0
 
復習も兼ねて!C#6.0-7.0
復習も兼ねて!C#6.0-7.0復習も兼ねて!C#6.0-7.0
復習も兼ねて!C#6.0-7.0
 
TypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービューTypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービュー
 
PythonによるDeep Learningの実装
PythonによるDeep Learningの実装PythonによるDeep Learningの実装
PythonによるDeep Learningの実装
 
NumPyが物足りない人へのCython入門
NumPyが物足りない人へのCython入門NumPyが物足りない人へのCython入門
NumPyが物足りない人へのCython入門
 
Entity Framework 5.0 deep dive
Entity Framework 5.0 deep diveEntity Framework 5.0 deep dive
Entity Framework 5.0 deep dive
 
Ajax 応用
Ajax 応用Ajax 応用
Ajax 応用
 
Boost tour 1_40_0
Boost tour 1_40_0Boost tour 1_40_0
Boost tour 1_40_0
 
cp-3. 計算
cp-3. 計算cp-3. 計算
cp-3. 計算
 
Cython intro prelerease
Cython intro prelereaseCython intro prelerease
Cython intro prelerease
 

Mehr von Fujio Kojima

Burikaigi 2023「C# Live Coding!」 小島の分
Burikaigi  2023「C# Live Coding!」 小島の分Burikaigi  2023「C# Live Coding!」 小島の分
Burikaigi 2023「C# Live Coding!」 小島の分Fujio Kojima
 
2022.04.23 .NET 6 -7 時代のデスクトップ アプリケーション開発
2022.04.23 .NET 6 -7 時代のデスクトップ アプリケーション開発2022.04.23 .NET 6 -7 時代のデスクトップ アプリケーション開発
2022.04.23 .NET 6 -7 時代のデスクトップ アプリケーション開発Fujio Kojima
 
.NET 6 時代のデスクトップ アプリケーション開発
.NET 6 時代のデスクトップ アプリケーション開発.NET 6 時代のデスクトップ アプリケーション開発
.NET 6 時代のデスクトップ アプリケーション開発Fujio Kojima
 
BuriKaigi 2022 「C# Live Coding!」 小島の分
BuriKaigi 2022 「C# Live Coding!」 小島の分BuriKaigi 2022 「C# Live Coding!」 小島の分
BuriKaigi 2022 「C# Live Coding!」 小島の分Fujio Kojima
 
.NET 5 勉強会 ~.NET Framework から .NET へ~
.NET 5 勉強会 ~.NET Framework から .NET へ~.NET 5 勉強会 ~.NET Framework から .NET へ~
.NET 5 勉強会 ~.NET Framework から .NET へ~Fujio Kojima
 
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」Fujio Kojima
 
『議論パターン』 (Discussion Patterns) ~不毛な議論を避け、実り有る議論とするために~
『議論パターン』 (Discussion Patterns) ~不毛な議論を避け、実り有る議論とするために~『議論パターン』 (Discussion Patterns) ~不毛な議論を避け、実り有る議論とするために~
『議論パターン』 (Discussion Patterns) ~不毛な議論を避け、実り有る議論とするために~Fujio Kojima
 
牛タン会議 2019 @ 仙台 「C# ドキドキ ライブ!!」 小島の分
牛タン会議 2019 @ 仙台 「C# ドキドキ ライブ!!」 小島の分牛タン会議 2019 @ 仙台 「C# ドキドキ ライブ!!」 小島の分
牛タン会議 2019 @ 仙台 「C# ドキドキ ライブ!!」 小島の分Fujio Kojima
 
『機械学習 (AI/ML) の基礎と Microsoft の AI | 2019/04/02 Global AI Nights Fukui
『機械学習 (AI/ML) の基礎と Microsoft の AI | 2019/04/02 Global AI Nights Fukui『機械学習 (AI/ML) の基礎と Microsoft の AI | 2019/04/02 Global AI Nights Fukui
『機械学習 (AI/ML) の基礎と Microsoft の AI | 2019/04/02 Global AI Nights FukuiFujio Kojima
 
機械学習 (AI/ML) 勉強会 #2 IoT編
機械学習 (AI/ML) 勉強会 #2 IoT編 機械学習 (AI/ML) 勉強会 #2 IoT編
機械学習 (AI/ML) 勉強会 #2 IoT編 Fujio Kojima
 
機械学習 (AI/ML) 勉強会 #1 基本編
機械学習 (AI/ML) 勉強会 #1 基本編機械学習 (AI/ML) 勉強会 #1 基本編
機械学習 (AI/ML) 勉強会 #1 基本編Fujio Kojima
 
BuriKaigi2019 「C# ドキドキ・ライブコーディング」 小島の分
BuriKaigi2019 「C# ドキドキ・ライブコーディング」 小島の分BuriKaigi2019 「C# ドキドキ・ライブコーディング」 小島の分
BuriKaigi2019 「C# ドキドキ・ライブコーディング」 小島の分Fujio Kojima
 
機械学習入門
機械学習入門機械学習入門
機械学習入門Fujio Kojima
 
C# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しよう
C# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しようC# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しよう
C# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しようFujio Kojima
 
「ふくいソフトウェアコンペティション 2014 大賞受賞者プレゼンテーション」
「ふくいソフトウェアコンペティション 2014 大賞受賞者プレゼンテーション」「ふくいソフトウェアコンペティション 2014 大賞受賞者プレゼンテーション」
「ふくいソフトウェアコンペティション 2014 大賞受賞者プレゼンテーション」Fujio Kojima
 
.NET MVP によるドキドキ・ライブコーディング! 小島の分
.NET MVP によるドキドキ・ライブコーディング! 小島の分.NET MVP によるドキドキ・ライブコーディング! 小島の分
.NET MVP によるドキドキ・ライブコーディング! 小島の分Fujio Kojima
 
Windows アプリケーション開発 はじめに ~ Windows アプリケーション開発初学者の方向け Visual Studio を使ったアプリケーショ...
Windows アプリケーション開発はじめに ~ Windows アプリケーション開発初学者の方向けVisual Studio を使ったアプリケーショ...Windows アプリケーション開発はじめに ~ Windows アプリケーション開発初学者の方向けVisual Studio を使ったアプリケーショ...
Windows アプリケーション開発 はじめに ~ Windows アプリケーション開発初学者の方向け Visual Studio を使ったアプリケーショ...Fujio Kojima
 
最新C#動向と関数型言語haskell ~命令型静的プログラミングから関数型動的プログラミングへのシフト~
最新C#動向と関数型言語haskell ~命令型静的プログラミングから関数型動的プログラミングへのシフト~最新C#動向と関数型言語haskell ~命令型静的プログラミングから関数型動的プログラミングへのシフト~
最新C#動向と関数型言語haskell ~命令型静的プログラミングから関数型動的プログラミングへのシフト~Fujio Kojima
 
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~Fujio Kojima
 

Mehr von Fujio Kojima (20)

Burikaigi 2023「C# Live Coding!」 小島の分
Burikaigi  2023「C# Live Coding!」 小島の分Burikaigi  2023「C# Live Coding!」 小島の分
Burikaigi 2023「C# Live Coding!」 小島の分
 
2022.04.23 .NET 6 -7 時代のデスクトップ アプリケーション開発
2022.04.23 .NET 6 -7 時代のデスクトップ アプリケーション開発2022.04.23 .NET 6 -7 時代のデスクトップ アプリケーション開発
2022.04.23 .NET 6 -7 時代のデスクトップ アプリケーション開発
 
.NET 6 時代のデスクトップ アプリケーション開発
.NET 6 時代のデスクトップ アプリケーション開発.NET 6 時代のデスクトップ アプリケーション開発
.NET 6 時代のデスクトップ アプリケーション開発
 
BuriKaigi 2022 「C# Live Coding!」 小島の分
BuriKaigi 2022 「C# Live Coding!」 小島の分BuriKaigi 2022 「C# Live Coding!」 小島の分
BuriKaigi 2022 「C# Live Coding!」 小島の分
 
.NET 5 勉強会 ~.NET Framework から .NET へ~
.NET 5 勉強会 ~.NET Framework から .NET へ~.NET 5 勉強会 ~.NET Framework から .NET へ~
.NET 5 勉強会 ~.NET Framework から .NET へ~
 
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
 
『議論パターン』 (Discussion Patterns) ~不毛な議論を避け、実り有る議論とするために~
『議論パターン』 (Discussion Patterns) ~不毛な議論を避け、実り有る議論とするために~『議論パターン』 (Discussion Patterns) ~不毛な議論を避け、実り有る議論とするために~
『議論パターン』 (Discussion Patterns) ~不毛な議論を避け、実り有る議論とするために~
 
牛タン会議 2019 @ 仙台 「C# ドキドキ ライブ!!」 小島の分
牛タン会議 2019 @ 仙台 「C# ドキドキ ライブ!!」 小島の分牛タン会議 2019 @ 仙台 「C# ドキドキ ライブ!!」 小島の分
牛タン会議 2019 @ 仙台 「C# ドキドキ ライブ!!」 小島の分
 
『機械学習 (AI/ML) の基礎と Microsoft の AI | 2019/04/02 Global AI Nights Fukui
『機械学習 (AI/ML) の基礎と Microsoft の AI | 2019/04/02 Global AI Nights Fukui『機械学習 (AI/ML) の基礎と Microsoft の AI | 2019/04/02 Global AI Nights Fukui
『機械学習 (AI/ML) の基礎と Microsoft の AI | 2019/04/02 Global AI Nights Fukui
 
機械学習 (AI/ML) 勉強会 #2 IoT編
機械学習 (AI/ML) 勉強会 #2 IoT編 機械学習 (AI/ML) 勉強会 #2 IoT編
機械学習 (AI/ML) 勉強会 #2 IoT編
 
機械学習 (AI/ML) 勉強会 #1 基本編
機械学習 (AI/ML) 勉強会 #1 基本編機械学習 (AI/ML) 勉強会 #1 基本編
機械学習 (AI/ML) 勉強会 #1 基本編
 
BuriKaigi2019 「C# ドキドキ・ライブコーディング」 小島の分
BuriKaigi2019 「C# ドキドキ・ライブコーディング」 小島の分BuriKaigi2019 「C# ドキドキ・ライブコーディング」 小島の分
BuriKaigi2019 「C# ドキドキ・ライブコーディング」 小島の分
 
機械学習入門
機械学習入門機械学習入門
機械学習入門
 
C# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しよう
C# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しようC# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しよう
C# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しよう
 
「ふくいソフトウェアコンペティション 2014 大賞受賞者プレゼンテーション」
「ふくいソフトウェアコンペティション 2014 大賞受賞者プレゼンテーション」「ふくいソフトウェアコンペティション 2014 大賞受賞者プレゼンテーション」
「ふくいソフトウェアコンペティション 2014 大賞受賞者プレゼンテーション」
 
.NET MVP によるドキドキ・ライブコーディング! 小島の分
.NET MVP によるドキドキ・ライブコーディング! 小島の分.NET MVP によるドキドキ・ライブコーディング! 小島の分
.NET MVP によるドキドキ・ライブコーディング! 小島の分
 
Windows アプリケーション開発 はじめに ~ Windows アプリケーション開発初学者の方向け Visual Studio を使ったアプリケーショ...
Windows アプリケーション開発はじめに ~ Windows アプリケーション開発初学者の方向けVisual Studio を使ったアプリケーショ...Windows アプリケーション開発はじめに ~ Windows アプリケーション開発初学者の方向けVisual Studio を使ったアプリケーショ...
Windows アプリケーション開発 はじめに ~ Windows アプリケーション開発初学者の方向け Visual Studio を使ったアプリケーショ...
 
HTML5 on ASP.NET
HTML5 on ASP.NETHTML5 on ASP.NET
HTML5 on ASP.NET
 
最新C#動向と関数型言語haskell ~命令型静的プログラミングから関数型動的プログラミングへのシフト~
最新C#動向と関数型言語haskell ~命令型静的プログラミングから関数型動的プログラミングへのシフト~最新C#動向と関数型言語haskell ~命令型静的プログラミングから関数型動的プログラミングへのシフト~
最新C#動向と関数型言語haskell ~命令型静的プログラミングから関数型動的プログラミングへのシフト~
 
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
 

Kürzlich hochgeladen

モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 

Kürzlich hochgeladen (9)

モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 

C# LINQ入門

  • 1. Hokuriku.NET C# LINQ入門 2011/06/11 小島 富治雄 福井コンピュータ株式会社
  • 2. Agenda 1. はじめに 2. C# のこれから 3. C#1.0 までで 押さえておくこと 4. C#2.0 と 3.0 の新機能 5. Linq
  • 4. 福井情報技術者協会 • http://fitea.org • 福井のIT産業に関わる技術者の「横のつなが り」を支援するコミュニティ  FITEAのミッション – 『私たちは、福井をソフトウェア大国にするべく積 極的に活動を行い、福井の情報技術者を心豊か、ス キル豊か、フトコロ豊かにします』  主な活動 – 技術的なセミナーの誘致、自主開催、および技術者 同士の交流会 (飲み会等) の開催
  • 5. 自己紹介 • 小島 富治雄 • 福井コンピュータ株式会社 • Microsoft MVP for Development Tools - Visual C# 英会話 ジャグリング マイブーム 自転車通勤 万年筆
  • 9. Anders Hejlsberg 談: C#の今後について 2006/02/02 at 横浜 Q. 今後C#は、関数型言語として進化してい くのか? A. Yes. C#3.0 や LINQ で導入された「ラム ダ式」などの機能は、Haskell や ML など の関数型言語に触発されたものだ。 これらの機能は開発をもっと自由な形にす る。設計しているだけでワクワクするよう な機能だ。C# 3.0というのは、オブジェク ト指向言語と関数型言語の「ハッピーな結 婚」といってよいものになるだろう。
  • 10. Anders Hejlsberg 談: C#の今後について Q. AOP (アスペクト指向プログラミング) 機 能 (=オブジェクトに対して後付けで機能 を挿入する仕組み) を提供する予定は? A. AOP は、個人的には懐疑的。AOP が役立 つ場面もあるが副作用もある。 C# の機能 (属性や Partial Class) で代 用できるケースも多い。
  • 11.
  • 13. C#1.0までで 押さえておくところ • .NET らしい Cool な書き方 –delegate と event –データバインド – 属性 (アノテーション)
  • 14. 例 • Demo –委譲による分割 →MVC構造など –データバインド • 双方向依存 → interface、delegate、event に よるデータバインド
  • 15. データバインド <<interface>> IEnumerable<T> <<interface>> DrawingUI IDataSource<T> + OnChanged() : void DataSource + <<event>> Changed : Action<T> <<realize>> interface IDrawable Data { void Draw(); + <<event>> Changed : Action<T> } + 追加() : void class DrawingUI<T> : UserControl where T : IDrawable { interface IDataSource<T> : IEnumerable<T> IDataSource<T> dataSource = null; { event Action<T> Changed; public IDataSource<T> DataSource } { set class Data<T> : IDataSource<T> { { dataSource = value; List<T> list = new List<T>(); value.Changed += OnChanged; } public event Action<T> Changed; private get { return dataSource; } } public void Add(T item) { public void Draw() list.Add(item); { if (Changed != null) if (DataSource != null) Changed(item); DataSource.ForEach(item => item.Draw()); } } public IEnumerator<T> GetEnumerator() void OnChanged(T item) { return list.GetEnumerator(); } { item.Draw(); IEnumerator IEnumerable.GetEnumerator() } { return list.GetEnumerator(); } } }
  • 16. DrawingUI DataSource + OnChanged() : void IDataSource<T> - drawingUI <<realize>> Data Application - data + <<event>> Changed : Action<T> + 追加() : void drawingUI.DataSource = data; データバインド
  • 17. 例 • Demo –C#2.0、3.0 による進化 –オブジェクトへの委譲 → メソッ ドへの委譲 • class → delegate → 匿名メソッド (クロージャ) → ラムダ式 • yield による継続
  • 18. 3. C#2.0 と 3.0 の新機能
  • 19. C#2.0 • Generics • 匿名メソッド • イテレータ (yield) • Partial Type • Nullable 型 • アクセサのアクセスレベル • static クラス • namespace alias qualifier • extern alias • #pragma • Conditional 属性 • 固定長配列 • デリゲートの Covariance/Contravariance
  • 20. C#3.0 • 暗黙的型付け • パーシャルメソッド • 自動プロパティ • オブジェクト イニシャライザ • コレクション イニシャライザ • 暗黙型付け配列 • 匿名型 (Anonymous Types) • 拡張メソッド • ラムダ式 (Lambda Expression) • LINQ
  • 21. Demo
  • 23. C#2.0と3.0の新機能について • A: 「C#3.0 の方が簡潔に意図を表現できる」 • B: 「でも C# 3.0 の文法がなくても、同じことは書ける。新たな文法 を採用しなくても、要は、書ければなんでもいいのであって」 • A: 「それって、極端な言い方をすれば、アセンブリ言語があれば、他 の言語は不要ってこと?」 • A: 「より意図をシンプルに書く方法ができたのなら、それは採用した いな」 • B: 「新しいものを取り入れるのにはリスクがある」 • A: 「『新しいものを取り入れない』リスクほどではないと思う」 • A: 「 ITエンジニアは、鮫みたいなもので、前に進むのを止めたら死ん でしまう」 • B: 「色々覚えるのは大変だ」 • A: 「確かに。でも、使わなきゃならなくなったわけではない。選択肢 が増えただけ。今までのものを置き換えなきゃいけないわけでもない」
  • 25. C#2.0 C#3.0 への布石 • Generics • 匿名メソッド • イテレータ (yield) • static クラス
  • 26. Generics • C++ で言うところの template に似ている • “型をパラメータに持つ型”を作る class Stack<T> { List<T> items = new List<T>(); public void Push(T item) { items.Insert(0, item); } public T Pop() { T item = items[0]; items.RemoveAt(0); return item; } } Demo:
  • 27. 匿名メソッド • インラインにメソッドを記述 • ブロック スコープをデリゲートに (=クロージャ) static void Sample3(string captionText) { userInput.KeyInput += delegate(string inputText) { string text = “ユーザー入力: "; MessageBox.Show(text + inputText, captionText); }; } Demo:
  • 28. イテレータ (yield) • Enumerable や IEnumerator インタフェース (foreach などに必要) を簡単に作成 class 自然数 { readonly int max = 1; public 自然数(int max) { this.max = max; } public IEnumerator<int> GetEnumerator() { for (int number = 1; number <= max; number++) yield return number; } } Demo:
  • 29. C#3.0 • より簡潔に意図が記述 できるようになった • Linq がメイン –ほとんどの新機能は Linq に通じ る
  • 30. 暗黙的型付け (var) • 型がなくなるわけじゃない • object で受けるのとは違う – インテリセンスが利く var point = new { X=100, Y=200 }; Demo:
  • 31. パーシャルメソッド • メソッドの宣言と定義を分離 • 実装があれば実行、なければ何もしない partial class PertialMethodSample { static partial void DoSomething(); static void Main(string[] args) { DoSomething(); } } partial class PertialMethodSample { static partial void DoSomething() { Console.WriteLine("DoSomething"); } } Demo:
  • 32. 自動プロパティ // 1.0~2.0 string name; public string Name { get { return name; } set { name = value; } } // 3.0 public string Name { get; set; }
  • 33. オブジェクト イニシャライザ • インスタンス化とプロパティ設定を一行で // 1.0~2.0 // プロパティをひとつずつ設定 Point point = new Point(); point.X = 1; point.Y = 2; // またはコンストラクタを作成して Point point = new Point(1, 2); // 3.0 var point = new Point { X = 1, Y = 2 };
  • 34. コレクション イニシャライザ • ICollection<T> を配列感覚で初期化 // 1.0~2.0 List<Point> list = new List<Point>(); list.Add(new Point(10, 20)); list.Add(new Point( 0, 0)); list.Add(new Point(30, 10)); // 3.0 var list = new List<Point> { new Point { X = 10, Y = 20 }, new Point { X = 0, Y = 0 }, new Point { X = 30, Y = 10 }, };
  • 36. 匿名型 (Anonymous Types) • 無名クラス var book = new { タイトル = “C#3.0入門”, 価格 = 2980 }; Console.WriteLine(book);
  • 37. 拡張メソッド • 既存クラスにインスタンスメソッドを追加 public static void 回(this int 回数, Action やる) { for (int カウント = 0; カウント < 回数; カウント ++) やる(); } // 使い方 10.回(海に向かって叫ぶ); Demo:
  • 38. ラムダ式 (Lambda Expression) • 匿名メソッドの発展形 Func<int, int, int> funcA = delegate(int x, int y) { return x + y; }; Func<int, int, int> funcL = (x, y) => x + y; Action actionA = delegate { Console.WriteLine("Hello"); }; Action actionL = () => Console.WriteLine("Hello"); Console.WriteLine(funcA(1, 2)); Console.WriteLine(funcL(1, 2)); actionA(); actionL(); Demo:
  • 40. Linq概要 • Linq Language-INtegrated Query (言語に統合されたクエリ)
  • 41. Linq とは • データの集合から簡単な記述で『必要なオブ ジェクト』の『必要なメンバ』のみを『必要と する順序』で取り出せるようにしたシンタック スシュガー – 開発者は抽出条件、抽出するメンバ、抽出順序に のみ関心を払う – 取り出すデータの型不要 – 繰り返し文不要 var query = from データ変数 in データの集合 where 抽出条件 orderby 抽出順序のキー項目 select 抽出するメンバ で構成される新しいクラス;
  • 42. Linq の種類 C# VB その他の言語 .NET LINQ LINQ to LINQ to LINQ to LINQ to SQL LINQ to XML Objects Datasets Entities Object XML Data Base
  • 43. データベース関連のLinq .NET LINQ • データベース周りのLinq LINQ to LINQ to LINQ to SQL DataSets Entities ADO.NET Dataset Entity Client Data Context Table Entity Adapter Framework Data Base
  • 44. Linq to Object •IEnumerable<T> なオブジェクトをクエリ var bookList = new[] { new { タイトル = "C#入門" , ISBNコード = "AAAAAAA", 価格 = 2980 }, new { タイトル = "VB入門" , ISBNコード = "BBBBBBB", 価格 = 3300 }, new { タイトル = ".NET Framework", ISBNコード = "CCCCCCC", 価格 = 7800 } }; var books = from aBook in bookList where aBook.ISBNコード == "BBBBBBB" select new { タイトル = aBook.タイトル, 価格 = aBook.価格 }; books.ForEach(item => Console.WriteLine(item));
  • 45. Linq to DataSet •DataSet をクエリ var ds = new DataSet(); testTableAdapter.Fill(ds); var accounts = from aBook in ds.Book where aBook.ISBNコード == "BBBBBBB" select new { タイトル = aBook.タイト ル, 価格 = aBook. 価格 }; books.ForEach(item => Console.WriteLine(item));
  • 46. Linq to SQL •SQL Server のデータベースをクエリ using (var db = new DataClasses1DataContext()) { var accounts = from aBook in db.Book where aBook.ISBNコード == "BBBBBBB" select new { タイトル = aBook.タイトル, 価格 = aBook.価格 }; books.ForEach(item => Console.WriteLine(item)); }
  • 47. LINQ to SQL の特長 • 生成されるSQL文はパラメータクエ リ • 追加/更新/削除時には自動的に トランザクションになる –DataContext.SubmitChanges() –Linq ではなく DataContext クラスの機 能
  • 48. Linq to SQL Demo
  • 49. Linq to Entities • Entity Framework による概念エ ンティティをクエリ var accounts = from aBook in textContext.Book where aBook.ISBNコード == "BBBBBBB" select new { タイトル = aBook.タイトル, 価格 = aBook.価格 }; books.ForEach(item => Console.WriteLine(item));
  • 50. Linq to XML • XML の Xelement をクエリ – RSS の読み込みなどに便利 var xElement = XElement.Load("../../Books.xml"); var books = from aBook in xElement.Elements() where aBook.Element("ISBNコード").Value == "BBBBBBB" select new { タイトル = aBook.Attribute("タイトル").Value, 価格 = int.Parse(aBook.Element("価格").Value) }; books.ForEach(item => Console.WriteLine(item));
  • 51. Linq to XML Demo
  • 52. ASP.NET での LINQ • LinqDataSource コントロール –LINQ to SQLだけでなく各種オ ブジェクトが利用可能
  • 54. Linq とは何ではないか 「SQL が C# や VB で書けるよう になった」のではない
  • 56. Linq の特長 • Expression Tree –IQueryable<T> Demo:
  • 57. クエリ式 • From 句からはじまる • from、let、where、join、orderby を内部に記述 • Select 句または group 句で終わる • add/update/deleteは仕様として存 在しない – データを抽出することが目的
  • 58. クエリ式 • where (抽出条件) – where book.タイトル.Contains(“.NET”) – where book.価格 < 2000 • orderby (抽出順序) – orderby book.タイトル – orderby book.価格 descending – orderby book.タイトル, book.価格
  • 59. LINQの仕組み • クエリ式はラムダ式を引数にとる拡張メソッドが 連結された形式に変換される var query = from book in bookse where book.タイトル.Contans(“C#”) orderby book.タイトル select new { book.タイトル, book.価格 }; var query = books.Where(book => book.タイトル.Contans(“C#”)) .OrderBy(book => book.タイトル) .Select(book => new {book.タイトル, book.価格});
  • 60. LINQの仕組み • System.LINQ.Enumerable.XXX – LINQ to Object • 配列や List<T> などは IEnumerable から派生 – LINQ to XML • Xelement.Decentants() が IEnumerable を返す – yieldによる実装 → 遅延実行 • System.LINQ.Queryable.XXX – LINQ to SQL • System.Data.Linq.Table<T> は IQueryable から派生 – ラムダ式の右辺を積んで式のツリー(Expression Tree)を作成 – IQuaryProviderによる実装 → 遅延実行 – 継承して独自のLINQ to XXX といった仕組みを構築 可能
  • 61. LINQの仕組み • 遅延実行 – データが実際に必要となるタイミングまでクエ リ条件が積み重ねられる • LINQ to SQL では最終的にデータを参照するタイミン グ (DataBind 時など) にSQL文が生成される var query1 = from book in db.書籍 orderby book.タイトル select new { 出版社名 = book.出版社.名前, 書籍タイトル = book.タイトル }; var query2 = from book in query1 where book.出版社名.Contains("C") select book; query2.ToList().ForEach(book => Console.WriteLine(book)); SELECT [t1].[名前] AS [出版社名], [t0].[タイトル] AS [書籍タイトル] FROM [dbo].[書籍] AS [t0] LEFT OUTER JOIN [dbo].[出版社] AS [t1] ON [t1].[ID] = [t0].[出版社ID] WHERE [t1].[名前] LIKE @p0 ORDER BY [t0].[タイトル]
  • 62. LINQによる異種データの結合 • Object、XML、SQLをJOIN可 能 –IEnumerable ベースで結合 • データベース連携の部分では 全データを取り出してから必 要なものを抽出 –LINQ to SQLをIEnumerableベー スで処理
  • 63. Linq と ADO.NET の関係 • ADO.NET の進化 –ADO.NET 1.0 –ADO.NET 2.0 –ADO.NET 3.0 –ADO.NET 3.5
  • 64. ADO.NET • 1.0 –Transaction Script • SqlConnecion + SqlCommand –Table Module • SqlDataAdapter で DataSet や DataTable
  • 65. ADO.NET • 2.0 –Table Module • SqlDataSource • ObjectDataSource で 型付きDataSet と専用TableAdapter
  • 66. ADO.NET • 3.0 –Domain Model • Linq to SQL で O-R マッピング データベース オブジェクト
  • 67. ADO.NET • 3.5 –Domain Model • Linq to Entities で O-R マッピング 物理データモデル 論理データモデル 概念データモデル 概念データクエリ
  • 68. 参考情報 – C#3.0の概要 • http://www.microsoft.com/japan/msdn/net/bb308966.aspx – LINQ:.NET統合言語クエリ • http://www.microsoft.com/japan/msdn/net/bb308959.aspx – .NET標準クエリ演算子 • http://www.microsoft.com/japan/msdn/net/bb394939.aspx
  • 69. Hokuriku.NET Vol.7 in 福井  2011年7月30日(土)  13:30~19:00  アオッサ6F 研修室601B (福井県福井市手寄1丁目4、JR福井駅から徒歩1分)  参加費: 500円程度のカンパをお願いしています (学生の方は無料です)  主催/共催: 北陸エンジニアグループ、福井情報技術者協会 (FITEA)  内容: – マイクロソフトのエバンジェリストやMVPが来福。最新のマイクロソ フト技術を解説。 – ライトニングトークスのトーカー募集中。  詳細/申込先: – Hokuriku.NET Vol.7 in 福井 : ATND (http://atnd.org/events/16219) まで