SlideShare a Scribd company logo
1 of 11
LINQ 最初の一歩

Webアプリケーションボード
      リーダ
小野修司(どっとねっとふぁ
      ん)
LINQとは
   データ(オブジェクト)の集合から簡単な
    記述で『必要なオブジェクト』の『必要な
    メンバ』を『必要とする順序』で取り出せ
    るようにした強力なシンタックスシュガー
     • 開発者は抽出条件、抽出するメンバ、抽出順序にのみ
       関心を払えばよい
     • 取り出すデータの型を用意したり、繰り返し文を書い
       たりする必要はない

      var query = from x in データの集合
                 where 抽出条件
                 orderby 抽出順序のキー項目
                 select 抽出するメンバ ;
対象となるデータ
   配列、LIST<T>(LINQ to Object)
    •   独自に定義したオブジェクトや組み込みオブジェクト
        の集合
   XMLファイル(LINQ to XML)
    •   XElementオブジェクトのツリー
   データベース(LINQ to SQL)
    •   DataContext経由で取り出すTableオブジェクト
        • 当初対応するのはSQL Serverのみ

   Entity Data Model(LINQ to Entities)
    •   Entity Frameworkによって生成されるオブジェクト
        • Entity Frameworkは.NET Framework 3.5の最初のリリース
         には含まれない予定
START -                                          Ver3.5
using System;
using System.Linq;
using System.Collections.Generic;
using System.IO;

namespace VSUGSAMPLE
{
  class Program
  {
     static void Main(string[] args)
     {
        DirectoryInfo di = new DirectoryInfo(@"C:UsersonoDesktopLINQVideo");
        List<FileInfo> files = new List<FileInfo>(di.GetFiles());

            var query = from f in files
                   where f.Length > 10 * 1024 * 1024 && f.Length < 15 * 1024 * 1024
                   select new { f.Name, f.Length };

            foreach (var file in query)
               Console.WriteLine("{0}:{1}", file.Name, file.Length);
        }
    }
}
デモ
1.   拡張メソッドの実装
2.   クエリ式をラムダ式を利用した拡張メソッ
     ド呼び出しに変換
3.   ラムダ式をdelegateに変換
4.   匿名型の排除
5.   オブジェクト初期化子の排除
6.   自動的に実装されるプロパティの排除
7.   暗黙的に型指定されたローカル変数の排除
8.   拡張メソッドの排除
9.   Ver2.0でコンパイル
END – Ver2.0対応
using System;                                                                             private static IEnumerable<TmpFile>
using System.Collections.Generic;                                                          select(IEnumerable<FileInfo> query)
using System.IO;                                                                      {
                                                                                           foreach (FileInfo f in query)
namespace VSUGSAMPLE                                                                       {
{                                                                                             TmpFile t = new TmpFile();
  class Program                                                                               t.Name = f.Name;
  {                                                                                           t.Length = f.Length;
     static void Main(string[] args)                                                          yield return t;
     {                                                                                     }
        DirectoryInfo di = new                                                        }
       DirectoryInfo(@"C:UsersonoDesktopLINQVideo");                          }
        List<FileInfo> files = new List<FileInfo>(di.GetFiles());
                                                                                  public class TmpFile
          IEnumerable<FileInfo> query2 = files.FindAll(delegate(FileInfo f)       {
             {                                                                       string name;
               return f.Length > 10 * 1024 * 1024 && f.Length < 15 * 1024            long length;
         * 1024;
             }                                                                        public string Name
          );                                                                          {
                                                                                        get { return name; }
         IEnumerable<TmpFile> query = select(query2);                                   set { name = value; }
                                                                                      }
         foreach (TmpFile file in query)                                              public long Length {
            Console.WriteLine("{0}:{1}", file.Name, file.Length);                       get { return length; }
     }                                                                                  set { length = value; }
                                                                                      }
                                                                                  }
                                                                              }
IEnumerableとIQueryable

   IQueryableでは式のツリーを形成
    • ラムダ式の式の部分をデータとして保持
    • データにアクセスするタイミングで式のツリー
     を評価
     • IEnumerableはプログラムそのものの実行

            遅延評価
※活用例
  LINQ to SQL-最終的に必要なSQL文のみを生成
LINQ to XML

   XMLを意識しないプログラムが可能
   XML形式の変換も可能
    XElement People = XElement.Parse(
      @"<People>
      <Person>
        <Name>オサダ トシヒロ</Name>
        <Gender>1</Gender>
        <Age>32</Age>
      </Person>
    </People>");

    var query = from p in People.Descendants("Person")
           where (int)p.Element("Gender") == 1 && (int)p.Element("Age") >= 20
           orderby (int)p.Element("Age")
           select p;
LINQ to SQL

   データベースと連携するクラスはウィザード
    で生成
   生成されるT-SQLはパラメータを使用
   追加/更新/削除は自動的にトランザクショ
    ン化
   パーシャルメソッドを使用してビジネスルー
    ルの追加が可能
      LINQTESTDataContext dtc = new LINQTESTDataContext();

         var query = from p in dtc.People
                where p.Gender == 1 && p.Age >= 20
                orderby p.Age
                select p;
まとめ

   LINQはそれがないとプログラムが書けな
    いというような要素ではない
   習得は容易、しかも超強力
   利用範囲は拡大していくと考えられる
    • データ形式毎に対応するIQuaryableプロバイダ
     が提供されればよい


   まず触れてその使い勝手を感じてほしい
参考情報
   ビデオ
     •   Decomposing LINQ
           •   http://www.microsoft.com/uk/msdn/nuggets/nugget/227/Decomposing-LINQ.aspx
     •   MSDN Nuggets
           •   http://www.microsoft.com/uk/msdn/nuggets/
           •   C# 3.0:8本 LINQ to SQL:18本 LINQ to XML:3本                 LINQ to Entities:5本 等
   Blog
     •   Mike Taulty's Blog : LINQ? Single Step this code...
           •   http://mtaulty.com/CommunityServer/blogs/mike_taultys_blog/archive/2007/10/03/9842.aspx
     •   LINQ: Building an Iqueryable Provider - Part I to VII
           •   http://blogs.msdn.com/mattwar/archive/2007/07/30/linq-building-an-iqueryable-provider-part-
               i.aspx
   資料
     •   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
     •   LINQ to SQL:リレーショナルデータのための.NET統合言語クエリ
           •   http://www.microsoft.com/japan/msdn/net/bb425822.aspx
     •   XMLデータ用の.NET統合言語クエリ
           •   http://www.microsoft.com/japan/msdn/net/bb308960.aspx

More Related Content

What's hot

200319 eash python_shareslide_functions
200319 eash python_shareslide_functions200319 eash python_shareslide_functions
200319 eash python_shareslide_functionsHiroki Katayama
 
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」Nagi Teramo
 
Python 3.6 リリースパーティー 発表資料
Python 3.6 リリースパーティー 発表資料Python 3.6 リリースパーティー 発表資料
Python 3.6 リリースパーティー 発表資料Atsuo Ishimoto
 
Active Directoryデータの "大きい整数"
Active Directoryデータの "大きい整数"Active Directoryデータの "大きい整数"
Active Directoryデータの "大きい整数"Michio Koyama
 
現実世界のJRuby(ショートバージョン)
現実世界のJRuby(ショートバージョン)現実世界のJRuby(ショートバージョン)
現実世界のJRuby(ショートバージョン)Hiroshi Nakamura
 
Esm lt threading_macro
Esm lt threading_macroEsm lt threading_macro
Esm lt threading_macro工 久納
 
C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020
C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020
C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020Fujio Kojima
 
Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義JPCERT Coordination Center
 
サーバーサイドでの非同期処理で色々やったよ
サーバーサイドでの非同期処理で色々やったよサーバーサイドでの非同期処理で色々やったよ
サーバーサイドでの非同期処理で色々やったよkoji lin
 
C#を始めたばかりの人へのLINQ to Objects
C#を始めたばかりの人へのLINQ to ObjectsC#を始めたばかりの人へのLINQ to Objects
C#を始めたばかりの人へのLINQ to ObjectsFumitaka Yamada
 
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-uedayou
 
C# LINQ ~深く知って、使いまくろう~
C# LINQ ~深く知って、使いまくろう~C# LINQ ~深く知って、使いまくろう~
C# LINQ ~深く知って、使いまくろう~Fujio Kojima
 
Chainer, Cupy入門
Chainer, Cupy入門Chainer, Cupy入門
Chainer, Cupy入門Yuya Unno
 
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~Miki Shimogai
 
UnityでC#を勉強しはじめた私の主張
UnityでC#を勉強しはじめた私の主張UnityでC#を勉強しはじめた私の主張
UnityでC#を勉強しはじめた私の主張Ryota Murohoshi
 
Java x Groovy: improve your java development life
Java x Groovy: improve your java development lifeJava x Groovy: improve your java development life
Java x Groovy: improve your java development lifeUehara Junji
 
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと 12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと Haruka Ozaki
 
PostgreSQL SQLチューニング入門 実践編(pgcon14j)
PostgreSQL SQLチューニング入門 実践編(pgcon14j)PostgreSQL SQLチューニング入門 実践編(pgcon14j)
PostgreSQL SQLチューニング入門 実践編(pgcon14j)Satoshi Yamada
 

What's hot (20)

200319 eash python_shareslide_functions
200319 eash python_shareslide_functions200319 eash python_shareslide_functions
200319 eash python_shareslide_functions
 
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
 
Project lambda
Project lambdaProject lambda
Project lambda
 
Python 3.6 リリースパーティー 発表資料
Python 3.6 リリースパーティー 発表資料Python 3.6 リリースパーティー 発表資料
Python 3.6 リリースパーティー 発表資料
 
Active Directoryデータの "大きい整数"
Active Directoryデータの "大きい整数"Active Directoryデータの "大きい整数"
Active Directoryデータの "大きい整数"
 
現実世界のJRuby
現実世界のJRuby現実世界のJRuby
現実世界のJRuby
 
現実世界のJRuby(ショートバージョン)
現実世界のJRuby(ショートバージョン)現実世界のJRuby(ショートバージョン)
現実世界のJRuby(ショートバージョン)
 
Esm lt threading_macro
Esm lt threading_macroEsm lt threading_macro
Esm lt threading_macro
 
C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020
C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020
C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020
 
Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義
 
サーバーサイドでの非同期処理で色々やったよ
サーバーサイドでの非同期処理で色々やったよサーバーサイドでの非同期処理で色々やったよ
サーバーサイドでの非同期処理で色々やったよ
 
C#を始めたばかりの人へのLINQ to Objects
C#を始めたばかりの人へのLINQ to ObjectsC#を始めたばかりの人へのLINQ to Objects
C#を始めたばかりの人へのLINQ to Objects
 
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
 
C# LINQ ~深く知って、使いまくろう~
C# LINQ ~深く知って、使いまくろう~C# LINQ ~深く知って、使いまくろう~
C# LINQ ~深く知って、使いまくろう~
 
Chainer, Cupy入門
Chainer, Cupy入門Chainer, Cupy入門
Chainer, Cupy入門
 
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
 
UnityでC#を勉強しはじめた私の主張
UnityでC#を勉強しはじめた私の主張UnityでC#を勉強しはじめた私の主張
UnityでC#を勉強しはじめた私の主張
 
Java x Groovy: improve your java development life
Java x Groovy: improve your java development lifeJava x Groovy: improve your java development life
Java x Groovy: improve your java development life
 
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと 12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
 
PostgreSQL SQLチューニング入門 実践編(pgcon14j)
PostgreSQL SQLチューニング入門 実践編(pgcon14j)PostgreSQL SQLチューニング入門 実践編(pgcon14j)
PostgreSQL SQLチューニング入門 実践編(pgcon14j)
 

Viewers also liked (20)

Gautam Resume
Gautam ResumeGautam Resume
Gautam Resume
 
Morefun the ancient ii
Morefun the ancient iiMorefun the ancient ii
Morefun the ancient ii
 
Hyper media.
Hyper media.Hyper media.
Hyper media.
 
ERA DEL ROCK
ERA DEL ROCKERA DEL ROCK
ERA DEL ROCK
 
prueba
pruebaprueba
prueba
 
Tablas
TablasTablas
Tablas
 
27 cubos
27 cubos27 cubos
27 cubos
 
Dia do professor
Dia do professorDia do professor
Dia do professor
 
Apresentação Trâmite 2012 rev2
Apresentação Trâmite 2012 rev2Apresentação Trâmite 2012 rev2
Apresentação Trâmite 2012 rev2
 
cronograma tema 2
cronograma tema 2cronograma tema 2
cronograma tema 2
 
Formato de imágenes
Formato de imágenesFormato de imágenes
Formato de imágenes
 
A Importância da Consulta Oftalmológica
A Importância da Consulta OftalmológicaA Importância da Consulta Oftalmológica
A Importância da Consulta Oftalmológica
 
Redes de computadores
Redes de computadoresRedes de computadores
Redes de computadores
 
Test56
Test56Test56
Test56
 
RSF- FOTOGRAFÍA CON MÓVIL (I)
RSF- FOTOGRAFÍA CON MÓVIL (I)RSF- FOTOGRAFÍA CON MÓVIL (I)
RSF- FOTOGRAFÍA CON MÓVIL (I)
 
Espelhos em aguas quietas
Espelhos em aguas quietasEspelhos em aguas quietas
Espelhos em aguas quietas
 
Caracteristicas de la creatividad
Caracteristicas de la creatividadCaracteristicas de la creatividad
Caracteristicas de la creatividad
 
Código de ética del colegio de ingenieros
Código de ética del colegio de ingenierosCódigo de ética del colegio de ingenieros
Código de ética del colegio de ingenieros
 
A04v2366 trabalho e crise pochmann 2009
A04v2366 trabalho e crise pochmann 2009A04v2366 trabalho e crise pochmann 2009
A04v2366 trabalho e crise pochmann 2009
 
Dia dos pais Gafisa 2011
Dia dos pais   Gafisa 2011Dia dos pais   Gafisa 2011
Dia dos pais Gafisa 2011
 

Similar to 20071030

PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL - C言語によるユーザ定義関数の作り方PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL - C言語によるユーザ定義関数の作り方Satoshi Nagayasu
 
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~Fujio Kojima
 
研究生のためのC++ no.2
研究生のためのC++ no.2研究生のためのC++ no.2
研究生のためのC++ no.2Tomohiro Namba
 
Jetpack datastore入門
Jetpack datastore入門Jetpack datastore入門
Jetpack datastore入門furusin
 
Javaセキュアコーディングセミナー東京第3回演習の解説
Javaセキュアコーディングセミナー東京第3回演習の解説Javaセキュアコーディングセミナー東京第3回演習の解説
Javaセキュアコーディングセミナー東京第3回演習の解説JPCERT Coordination Center
 
第2回デザインパターン資料
第2回デザインパターン資料第2回デザインパターン資料
第2回デザインパターン資料gaaupp
 
Javaセキュアコーディングセミナー東京第3回演習
Javaセキュアコーディングセミナー東京第3回演習Javaセキュアコーディングセミナー東京第3回演習
Javaセキュアコーディングセミナー東京第3回演習JPCERT Coordination Center
 
Androidの通信周りのコーディングについて
Androidの通信周りのコーディングについてAndroidの通信周りのコーディングについて
Androidの通信周りのコーディングについてShoichi Takagi
 
Swift 3.0 の新機能 - 追加・変更まわりだけ、ざっくり紹介 2 #devsap
Swift 3.0 の新機能 - 追加・変更まわりだけ、ざっくり紹介 2 #devsapSwift 3.0 の新機能 - 追加・変更まわりだけ、ざっくり紹介 2 #devsap
Swift 3.0 の新機能 - 追加・変更まわりだけ、ざっくり紹介 2 #devsapTomohiro Kumagai
 
“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
 
Twitter sphere of #twitter4j #twtr_hack
Twitter sphere of #twitter4j #twtr_hackTwitter sphere of #twitter4j #twtr_hack
Twitter sphere of #twitter4j #twtr_hackkimukou_26 Kimukou
 
Design mvc apps with spotify web api object model
Design mvc apps with spotify web api object modelDesign mvc apps with spotify web api object model
Design mvc apps with spotify web api object modelTakao Tetsuro
 
.NETからActive Directoryデータにアクセス ~ユーザ情報の取得と表示~
.NETからActive Directoryデータにアクセス ~ユーザ情報の取得と表示~.NETからActive Directoryデータにアクセス ~ユーザ情報の取得と表示~
.NETからActive Directoryデータにアクセス ~ユーザ情報の取得と表示~Michio Koyama
 
[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2Atsuo Yamasaki
 
.NETからActive Directoryデータにアクセス ~グループ情報の取得と表示~
.NETからActive Directoryデータにアクセス ~グループ情報の取得と表示~.NETからActive Directoryデータにアクセス ~グループ情報の取得と表示~
.NETからActive Directoryデータにアクセス ~グループ情報の取得と表示~Michio Koyama
 

Similar to 20071030 (20)

PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL - C言語によるユーザ定義関数の作り方PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL - C言語によるユーザ定義関数の作り方
 
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
 
研究生のためのC++ no.2
研究生のためのC++ no.2研究生のためのC++ no.2
研究生のためのC++ no.2
 
Jetpack datastore入門
Jetpack datastore入門Jetpack datastore入門
Jetpack datastore入門
 
Boost tour 1_44_0
Boost tour 1_44_0Boost tour 1_44_0
Boost tour 1_44_0
 
Teclab3
Teclab3Teclab3
Teclab3
 
Javaセキュアコーディングセミナー東京第3回演習の解説
Javaセキュアコーディングセミナー東京第3回演習の解説Javaセキュアコーディングセミナー東京第3回演習の解説
Javaセキュアコーディングセミナー東京第3回演習の解説
 
第2回デザインパターン資料
第2回デザインパターン資料第2回デザインパターン資料
第2回デザインパターン資料
 
Javaセキュアコーディングセミナー東京第3回演習
Javaセキュアコーディングセミナー東京第3回演習Javaセキュアコーディングセミナー東京第3回演習
Javaセキュアコーディングセミナー東京第3回演習
 
Junit4
Junit4Junit4
Junit4
 
Androidの通信周りのコーディングについて
Androidの通信周りのコーディングについてAndroidの通信周りのコーディングについて
Androidの通信周りのコーディングについて
 
C# LINQ入門
C# LINQ入門C# LINQ入門
C# LINQ入門
 
Swift 3.0 の新機能 - 追加・変更まわりだけ、ざっくり紹介 2 #devsap
Swift 3.0 の新機能 - 追加・変更まわりだけ、ざっくり紹介 2 #devsapSwift 3.0 の新機能 - 追加・変更まわりだけ、ざっくり紹介 2 #devsap
Swift 3.0 の新機能 - 追加・変更まわりだけ、ざっくり紹介 2 #devsap
 
“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”他...
 
Twitter sphere of #twitter4j #twtr_hack
Twitter sphere of #twitter4j #twtr_hackTwitter sphere of #twitter4j #twtr_hack
Twitter sphere of #twitter4j #twtr_hack
 
Design mvc apps with spotify web api object model
Design mvc apps with spotify web api object modelDesign mvc apps with spotify web api object model
Design mvc apps with spotify web api object model
 
.NETからActive Directoryデータにアクセス ~ユーザ情報の取得と表示~
.NETからActive Directoryデータにアクセス ~ユーザ情報の取得と表示~.NETからActive Directoryデータにアクセス ~ユーザ情報の取得と表示~
.NETからActive Directoryデータにアクセス ~ユーザ情報の取得と表示~
 
[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2
 
Gaej Jdo
Gaej JdoGaej Jdo
Gaej Jdo
 
.NETからActive Directoryデータにアクセス ~グループ情報の取得と表示~
.NETからActive Directoryデータにアクセス ~グループ情報の取得と表示~.NETからActive Directoryデータにアクセス ~グループ情報の取得と表示~
.NETからActive Directoryデータにアクセス ~グループ情報の取得と表示~
 

More from 小野 修司 (20)

20140322
2014032220140322
20140322
 
20121215
2012121520121215
20121215
 
20120616
2012061620120616
20120616
 
20120609
2012060920120609
20120609
 
20120425
2012042520120425
20120425
 
20120128
2012012820120128
20120128
 
20111203
2011120320111203
20111203
 
20110607
2011060720110607
20110607
 
20100313
2010031320100313
20100313
 
20100224
2010022420100224
20100224
 
20100218 lt
20100218 lt20100218 lt
20100218 lt
 
20100218
2010021820100218
20100218
 
20091207
2009120720091207
20091207
 
20090711
2009071120090711
20090711
 
20090606
2009060620090606
20090606
 
20090418
2009041820090418
20090418
 
20090328
2009032820090328
20090328
 
20090212
2009021220090212
20090212
 
20081003
2008100320081003
20081003
 
20080630
2008063020080630
20080630
 

20071030

  • 1. LINQ 最初の一歩 Webアプリケーションボード リーダ 小野修司(どっとねっとふぁ ん)
  • 2. LINQとは  データ(オブジェクト)の集合から簡単な 記述で『必要なオブジェクト』の『必要な メンバ』を『必要とする順序』で取り出せ るようにした強力なシンタックスシュガー • 開発者は抽出条件、抽出するメンバ、抽出順序にのみ 関心を払えばよい • 取り出すデータの型を用意したり、繰り返し文を書い たりする必要はない var query = from x in データの集合 where 抽出条件 orderby 抽出順序のキー項目 select 抽出するメンバ ;
  • 3. 対象となるデータ  配列、LIST<T>(LINQ to Object) • 独自に定義したオブジェクトや組み込みオブジェクト の集合  XMLファイル(LINQ to XML) • XElementオブジェクトのツリー  データベース(LINQ to SQL) • DataContext経由で取り出すTableオブジェクト • 当初対応するのはSQL Serverのみ  Entity Data Model(LINQ to Entities) • Entity Frameworkによって生成されるオブジェクト • Entity Frameworkは.NET Framework 3.5の最初のリリース には含まれない予定
  • 4. START - Ver3.5 using System; using System.Linq; using System.Collections.Generic; using System.IO; namespace VSUGSAMPLE { class Program { static void Main(string[] args) { DirectoryInfo di = new DirectoryInfo(@"C:UsersonoDesktopLINQVideo"); List<FileInfo> files = new List<FileInfo>(di.GetFiles()); var query = from f in files where f.Length > 10 * 1024 * 1024 && f.Length < 15 * 1024 * 1024 select new { f.Name, f.Length }; foreach (var file in query) Console.WriteLine("{0}:{1}", file.Name, file.Length); } } }
  • 5. デモ 1. 拡張メソッドの実装 2. クエリ式をラムダ式を利用した拡張メソッ ド呼び出しに変換 3. ラムダ式をdelegateに変換 4. 匿名型の排除 5. オブジェクト初期化子の排除 6. 自動的に実装されるプロパティの排除 7. 暗黙的に型指定されたローカル変数の排除 8. 拡張メソッドの排除 9. Ver2.0でコンパイル
  • 6. END – Ver2.0対応 using System; private static IEnumerable<TmpFile> using System.Collections.Generic; select(IEnumerable<FileInfo> query) using System.IO; { foreach (FileInfo f in query) namespace VSUGSAMPLE { { TmpFile t = new TmpFile(); class Program t.Name = f.Name; { t.Length = f.Length; static void Main(string[] args) yield return t; { } DirectoryInfo di = new } DirectoryInfo(@"C:UsersonoDesktopLINQVideo"); } List<FileInfo> files = new List<FileInfo>(di.GetFiles()); public class TmpFile IEnumerable<FileInfo> query2 = files.FindAll(delegate(FileInfo f) { { string name; return f.Length > 10 * 1024 * 1024 && f.Length < 15 * 1024 long length; * 1024; } public string Name ); { get { return name; } IEnumerable<TmpFile> query = select(query2); set { name = value; } } foreach (TmpFile file in query) public long Length { Console.WriteLine("{0}:{1}", file.Name, file.Length); get { return length; } } set { length = value; } } } }
  • 7. IEnumerableとIQueryable  IQueryableでは式のツリーを形成 • ラムダ式の式の部分をデータとして保持 • データにアクセスするタイミングで式のツリー を評価 • IEnumerableはプログラムそのものの実行 遅延評価 ※活用例 LINQ to SQL-最終的に必要なSQL文のみを生成
  • 8. LINQ to XML  XMLを意識しないプログラムが可能  XML形式の変換も可能 XElement People = XElement.Parse( @"<People> <Person> <Name>オサダ トシヒロ</Name> <Gender>1</Gender> <Age>32</Age> </Person> </People>"); var query = from p in People.Descendants("Person") where (int)p.Element("Gender") == 1 && (int)p.Element("Age") >= 20 orderby (int)p.Element("Age") select p;
  • 9. LINQ to SQL  データベースと連携するクラスはウィザード で生成  生成されるT-SQLはパラメータを使用  追加/更新/削除は自動的にトランザクショ ン化  パーシャルメソッドを使用してビジネスルー ルの追加が可能 LINQTESTDataContext dtc = new LINQTESTDataContext(); var query = from p in dtc.People where p.Gender == 1 && p.Age >= 20 orderby p.Age select p;
  • 10. まとめ  LINQはそれがないとプログラムが書けな いというような要素ではない  習得は容易、しかも超強力  利用範囲は拡大していくと考えられる • データ形式毎に対応するIQuaryableプロバイダ が提供されればよい  まず触れてその使い勝手を感じてほしい
  • 11. 参考情報  ビデオ • Decomposing LINQ • http://www.microsoft.com/uk/msdn/nuggets/nugget/227/Decomposing-LINQ.aspx • MSDN Nuggets • http://www.microsoft.com/uk/msdn/nuggets/ • C# 3.0:8本 LINQ to SQL:18本 LINQ to XML:3本 LINQ to Entities:5本 等  Blog • Mike Taulty's Blog : LINQ? Single Step this code... • http://mtaulty.com/CommunityServer/blogs/mike_taultys_blog/archive/2007/10/03/9842.aspx • LINQ: Building an Iqueryable Provider - Part I to VII • http://blogs.msdn.com/mattwar/archive/2007/07/30/linq-building-an-iqueryable-provider-part- i.aspx  資料 • 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 • LINQ to SQL:リレーショナルデータのための.NET統合言語クエリ • http://www.microsoft.com/japan/msdn/net/bb425822.aspx • XMLデータ用の.NET統合言語クエリ • http://www.microsoft.com/japan/msdn/net/bb308960.aspx