狠狠撸

狠狠撸Share a Scribd company logo
LINQな世界への招待


 Webアプリケーションボードリー
         ダ
 小野修司(どっとねっとふぁん)

      VSUG DAY 2007.12.8
LINQとは


? データ(オブジェクト)の集合から簡単な記述
  で『必要なオブジェクト』の『必要なメンバ』
  のみを『必要とする順序』で取り出せるように
  したシンタックスシュガー
 – 開発者は抽出条件、抽出するメンバ、抽出順序にの
   み関心を払う
 – 取り出すデータの型を用意したり、繰り返し文を書
   いたりしない
   ? 定型的作業のタイピングの大幅な削減
?クエリ式のサンプル:
var query = from   データ変数 in データの集合
           where   抽出条件
           orderby 抽出順序のキー項目
           select  抽出するメンバ で構成される新しいクラス
             VSUG DAY 2007.12.8
対象となるデータ


? 配列、LIST<T>(LINQ to Object)
  – 独自に定義したオブジェクトや組み込みオブジェクト
    の集合
? XMLファイル(LINQ to XML)
  – XDocument、XElement内のオブジェクトのツリー
? データベース(LINQ to SQL)
  – DataContext経由で取り出すTable<TEntity>オブジェク
    ト
     ? 対応するのはSQL Serverのみ


? Entity Data Model(LINQ to Entities)
  – Entity Frameworkによって生成されるオブジェクト
     ? Entity Frameworkは.NET Framework 3.5のリリースには含
       まれていない

                  VSUG DAY 2007.12.8
LINQ to Object

? Peopleという名前の配列にName、
  Genger、Ageプロパティを持つ匿名オブ
  ジェクトを持つ

var query = from p in People
             where p.Gender == 1
             orderby p.Age
             select new { p.Name, p.Age };

                 VSUG DAY 2007.12.8
LINQ to XML

? PeopleというXElement変数にXMLファイルを読み込
  む
? XMLファイルはPeople/Personという階層構造を持
  ち、PersonノードにはName、Gender、Ageノードが
  含まれる

var query = from p in People.Descendants("Person")
            where (int)p.Element("Gender") == 1
            orderby (int)p.Element("Age")
            select
                new {
                   Name = (string)p.Element("Name"),
                   Age = (int)p.Element(“Age”)
                };
                    VSUG DAY 2007.12.8
LINQ to SQL

? ウィザードを利用してDataContextクラス、
  Table<TEntity>クラスを作成している

var query = from p in dtc.People
            where p.Gender == 1
            orderby p.Age
            select new { p.Name, p.Age };



                VSUG DAY 2007.12.8
LINQの仕組み ー その1

? クエリ式はラムダ式を引数にとる拡張メソッドが連結
  された形式に変換される

var query = from p in People
             where p.Gender == 1
             orderby p.Age
             select new { p.Name, p.Age };


var query = People.Where(p => p.Gender == 1)
                  .OrderBy(p => p.Age)
                  .Select(p => new { p.Name, p.Age });


                      VSUG DAY 2007.12.8
LINQの仕組み ー その2

? 対象となるデータにより呼び出される拡張メソッ
  ドは変わる
 – 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<Tentity>がIQueryableを継承
   ? ラムダ式の右辺を積んで式のツリー(Expression Tree)を
     作成
   ? IQuaryProviderによる実装 → 遅延実行
   ? 継承して独自のLINQ to XXX といった仕組みを構築可能
                      VSUG DAY 2007.12.8
LINQの仕組み ー その3

? 遅延実行
      – データが実際に必要となるタイミングまでクエリ条
        件は積み重ねられていく
            ? LINQ to SQLでは積み重ねられたクエリでSQL文が生成
var query0 = from p in dtc.People
               where p.Gender == 1
               select p;

var query = from p in query0
             where p.Age > 20
             orderby p.Age
             select new { p.Name, p.Age };



SELECT [t0].[Name], [t0].[Age]
FROM [dbo].[People] AS [t0]
WHERE ([t0].[Age] > @p0) AND ([t0].[Gender] = @p1)
ORDER BY [t0].[Age]




                                       VSUG DAY 2007.12.8
LINQ to Objectの使いどころ



? Frameworkに組み込まれたデータを活用する
  – サンプル:ファイル内文字列検索


LINQ to XMLの使いどころ

? RSSで提供されるデータを利用する
? Webサービスで提供されるデータを利用する
  – XML特有の操作技術を覚える必要がない
  – XML文書の変形に利用することも可能

  – サンプル:天気予報サービスの利用


               VSUG DAY 2007.12.8
LINQ to SQLの使いどころ

? データベース操作の標準化
  – 生成されるSQL文はパラメータクエリとなる
  – 追加/更新/削除時には自動的にトランザクショ
    ンとなる
    ? 楽観的同時実行制御
      – 全データチェック、timestampチェック等
    ? DataContext.SubmitChanges() により実行される
  – 追加/更新/削除時の検証ロジックをまとめて管
    理できる
    ? DataContextやエンティティクラスのpartialメソッドを
      利用
  – 追加/更新/削除はウィザードで作成されるクラ
    スの機能と考えるべき
                 VSUG DAY 2007.12.8
LINQによる異種データの結合

? Object、XML、SQLをJOINすることは可
  能
 – バーチャルラボで確認できる
 – IEnumerableをベースに結合する
   ? 逆(IQuaryableベース)は不可
   ? データベース連携の部分では全データを取り出し
     てから必要なものを抽出
    – LINQ to SQLをIEnumerableベースで処理
   ? DB連携時は無理に結合するより、最小限のデータ
     を取得するようクエリを分けたほうがよいかも
    – Containsメソッド等を利用して解決できる


               VSUG DAY 2007.12.8
ASP.NETでのLINQ

? LinqDataSourceコントロールが追加
 – LINQ to SQLだけでなく各種オブジェクトが利用
   可能
 – 自動で追加/更新/削除が可能
   ? ListViewと組み合わせるとノンコーディングでデータ
     管理ツールのできあがり
   ? 制限事項:LINQ to SQLを利用し、SELECTを使わない
 – 表示項目を制限したうえでの追加/更新/削除は
   プログラミングによって対応可能
   ? ソートやページングの機能はノンコーディングで利用
     可能
   ? Extensionメソッドを利用した検証機能も利用可能
   ? 同時実行制御は自分でプログラミング
                VSUG DAY 2007.12.8
LINQな世界とは

? クエリ式がSQL文に似ているため、デー
  タベースとの連携が注目されがちだが、
  LINQは本来必要なデータを手軽に抽出す
  るための技術である

? データの抽出はどんなプログラムにも存
  在する。そこにどのようにLINQを使って
  いくかを考えるのがLINQな世界のプログ
  ラミング

            VSUG DAY 2007.12.8
参考情報

?   ビデオ
     – MSDN Nuggets
           ?   http://www.microsoft.com/uk/msdn/nuggets/
           ?   C# 3.0:8本 LINQ to SQL:18本 LINQ to XML:6本                LINQ to Entities:5本   等
?   Blog
     – ScottGu Blog 翻訳
           ?   http://blogs.wankuma.com/chicasharp/
     – Mike Taulty's Blog : LINQ? Single Step this code...
           ?   http://mtaulty.com/CommunityServer/blogs/mike_taultys_blog/archive/2007/10/03/9842.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




                                        VSUG DAY 2007.12.8

More Related Content

What's hot (19)

データベースシステム论05 - 笔辞蝉迟驳谤别厂蚕尝のインストール
データベースシステム论05 - 笔辞蝉迟驳谤别厂蚕尝のインストールデータベースシステム论05 - 笔辞蝉迟驳谤别厂蚕尝のインストール
データベースシステム论05 - 笔辞蝉迟驳谤别厂蚕尝のインストール
Shohei Yokoyama
?
データベースシステム论06 - SQL基础演习1 データの定义と操作
データベースシステム论06 - SQL基础演习1 データの定义と操作データベースシステム论06 - SQL基础演习1 データの定义と操作
データベースシステム论06 - SQL基础演习1 データの定义と操作
Shohei Yokoyama
?
闯补惫补厂肠谤颈辫迟から利用する贵颈谤别产补蝉别
闯补惫补厂肠谤颈辫迟から利用する贵颈谤别产补蝉别闯补惫补厂肠谤颈辫迟から利用する贵颈谤别产补蝉别
闯补惫补厂肠谤颈辫迟から利用する贵颈谤别产补蝉别
Takuji Shimokawa
?
データベースシステム论01 - ガイダンス
データベースシステム论01 - ガイダンスデータベースシステム论01 - ガイダンス
データベースシステム论01 - ガイダンス
Shohei Yokoyama
?
Datalogからsqlへの トランスレータを書いた話
Datalogからsqlへの トランスレータを書いた話Datalogからsqlへの トランスレータを書いた話
Datalogからsqlへの トランスレータを書いた話
Yuki Takeichi
?
碍颈产补苍补でログを可视化してみた
碍颈产补苍补でログを可视化してみた碍颈产补苍补でログを可视化してみた
碍颈产补苍补でログを可视化してみた
Daigou Harada
?
それFluentdで! #fluentd
それFluentdで!  #fluentdそれFluentdで!  #fluentd
それFluentdで! #fluentd
Atsuko Shibuya
?
サイホ?ウス??ラホ?成果発表会
サイホ?ウス??ラホ?成果発表会サイホ?ウス??ラホ?成果発表会
サイホ?ウス??ラホ?成果発表会
Komei Kamiya
?
[DLHacks LT] PytorchのDataLoader -torchtextのソースコードを読んでみた-
[DLHacks LT] PytorchのDataLoader -torchtextのソースコードを読んでみた-[DLHacks LT] PytorchのDataLoader -torchtextのソースコードを読んでみた-
[DLHacks LT] PytorchのDataLoader -torchtextのソースコードを読んでみた-
Deep Learning JP
?
贰濒补蝉迟颈肠厂别补谤肠丑+碍颈产补苍补でログデータの検索と视覚化を実现するテクニックと运用ノウハウ
贰濒补蝉迟颈肠厂别补谤肠丑+碍颈产补苍补でログデータの検索と视覚化を実现するテクニックと运用ノウハウ贰濒补蝉迟颈肠厂别补谤肠丑+碍颈产补苍补でログデータの検索と视覚化を実现するテクニックと运用ノウハウ
贰濒补蝉迟颈肠厂别补谤肠丑+碍颈产补苍补でログデータの検索と视覚化を実现するテクニックと运用ノウハウ
Kentaro Yoshida
?
Shibuya Perl Mongers#12 No Sql Couch Db
Shibuya Perl Mongers#12 No Sql Couch DbShibuya Perl Mongers#12 No Sql Couch Db
Shibuya Perl Mongers#12 No Sql Couch Db
Makoto Ohnami
?
alieaters_tokyo_20200325_yoshimura
alieaters_tokyo_20200325_yoshimuraalieaters_tokyo_20200325_yoshimura
alieaters_tokyo_20200325_yoshimura
Masaki Yoshimura
?
惭辞苍驳辞顿叠勉强会资料
惭辞苍驳辞顿叠勉强会资料惭辞苍驳辞顿叠勉强会资料
惭辞苍驳辞顿叠勉强会资料
Hiromune Shishido
?
骋别苍别谤补迟颈苍驳奥颈办颈辫别诲颈补冲滨颁尝搁18冲论文绍介
骋别苍别谤补迟颈苍驳奥颈办颈辫别诲颈补冲滨颁尝搁18冲论文绍介骋别苍别谤补迟颈苍驳奥颈办颈辫别诲颈补冲滨颁尝搁18冲论文绍介
骋别苍别谤补迟颈苍驳奥颈办颈辫别诲颈补冲滨颁尝搁18冲论文绍介
Masayoshi Kondo
?
今更だけど厂辩尝颈迟别触ってみたよ
今更だけど厂辩尝颈迟别触ってみたよ今更だけど厂辩尝颈迟别触ってみたよ
今更だけど厂辩尝颈迟别触ってみたよ
Keisuke Oohata
?
CouchDB JP & BigCouch
CouchDB JP & BigCouchCouchDB JP & BigCouch
CouchDB JP & BigCouch
Yohei Sasaki
?
Tarantalk
TarantalkTarantalk
Tarantalk
Masashi Umezawa
?
贰尘产耻濒办と顿颈驳诲补驳とデータ分析基盘と
贰尘产耻濒办と顿颈驳诲补驳とデータ分析基盘と贰尘产耻濒办と顿颈驳诲补驳とデータ分析基盘と
贰尘产耻濒办と顿颈驳诲补驳とデータ分析基盘と
Toru Takahashi
?
データベースシステム论05 - 笔辞蝉迟驳谤别厂蚕尝のインストール
データベースシステム论05 - 笔辞蝉迟驳谤别厂蚕尝のインストールデータベースシステム论05 - 笔辞蝉迟驳谤别厂蚕尝のインストール
データベースシステム论05 - 笔辞蝉迟驳谤别厂蚕尝のインストール
Shohei Yokoyama
?
データベースシステム论06 - SQL基础演习1 データの定义と操作
データベースシステム论06 - SQL基础演习1 データの定义と操作データベースシステム论06 - SQL基础演习1 データの定义と操作
データベースシステム论06 - SQL基础演习1 データの定义と操作
Shohei Yokoyama
?
闯补惫补厂肠谤颈辫迟から利用する贵颈谤别产补蝉别
闯补惫补厂肠谤颈辫迟から利用する贵颈谤别产补蝉别闯补惫补厂肠谤颈辫迟から利用する贵颈谤别产补蝉别
闯补惫补厂肠谤颈辫迟から利用する贵颈谤别产补蝉别
Takuji Shimokawa
?
データベースシステム论01 - ガイダンス
データベースシステム论01 - ガイダンスデータベースシステム论01 - ガイダンス
データベースシステム论01 - ガイダンス
Shohei Yokoyama
?
Datalogからsqlへの トランスレータを書いた話
Datalogからsqlへの トランスレータを書いた話Datalogからsqlへの トランスレータを書いた話
Datalogからsqlへの トランスレータを書いた話
Yuki Takeichi
?
碍颈产补苍补でログを可视化してみた
碍颈产补苍补でログを可视化してみた碍颈产补苍补でログを可视化してみた
碍颈产补苍补でログを可视化してみた
Daigou Harada
?
それFluentdで! #fluentd
それFluentdで!  #fluentdそれFluentdで!  #fluentd
それFluentdで! #fluentd
Atsuko Shibuya
?
サイホ?ウス??ラホ?成果発表会
サイホ?ウス??ラホ?成果発表会サイホ?ウス??ラホ?成果発表会
サイホ?ウス??ラホ?成果発表会
Komei Kamiya
?
[DLHacks LT] PytorchのDataLoader -torchtextのソースコードを読んでみた-
[DLHacks LT] PytorchのDataLoader -torchtextのソースコードを読んでみた-[DLHacks LT] PytorchのDataLoader -torchtextのソースコードを読んでみた-
[DLHacks LT] PytorchのDataLoader -torchtextのソースコードを読んでみた-
Deep Learning JP
?
贰濒补蝉迟颈肠厂别补谤肠丑+碍颈产补苍补でログデータの検索と视覚化を実现するテクニックと运用ノウハウ
贰濒补蝉迟颈肠厂别补谤肠丑+碍颈产补苍补でログデータの検索と视覚化を実现するテクニックと运用ノウハウ贰濒补蝉迟颈肠厂别补谤肠丑+碍颈产补苍补でログデータの検索と视覚化を実现するテクニックと运用ノウハウ
贰濒补蝉迟颈肠厂别补谤肠丑+碍颈产补苍补でログデータの検索と视覚化を実现するテクニックと运用ノウハウ
Kentaro Yoshida
?
Shibuya Perl Mongers#12 No Sql Couch Db
Shibuya Perl Mongers#12 No Sql Couch DbShibuya Perl Mongers#12 No Sql Couch Db
Shibuya Perl Mongers#12 No Sql Couch Db
Makoto Ohnami
?
alieaters_tokyo_20200325_yoshimura
alieaters_tokyo_20200325_yoshimuraalieaters_tokyo_20200325_yoshimura
alieaters_tokyo_20200325_yoshimura
Masaki Yoshimura
?
惭辞苍驳辞顿叠勉强会资料
惭辞苍驳辞顿叠勉强会资料惭辞苍驳辞顿叠勉强会资料
惭辞苍驳辞顿叠勉强会资料
Hiromune Shishido
?
骋别苍别谤补迟颈苍驳奥颈办颈辫别诲颈补冲滨颁尝搁18冲论文绍介
骋别苍别谤补迟颈苍驳奥颈办颈辫别诲颈补冲滨颁尝搁18冲论文绍介骋别苍别谤补迟颈苍驳奥颈办颈辫别诲颈补冲滨颁尝搁18冲论文绍介
骋别苍别谤补迟颈苍驳奥颈办颈辫别诲颈补冲滨颁尝搁18冲论文绍介
Masayoshi Kondo
?
今更だけど厂辩尝颈迟别触ってみたよ
今更だけど厂辩尝颈迟别触ってみたよ今更だけど厂辩尝颈迟别触ってみたよ
今更だけど厂辩尝颈迟别触ってみたよ
Keisuke Oohata
?
CouchDB JP & BigCouch
CouchDB JP & BigCouchCouchDB JP & BigCouch
CouchDB JP & BigCouch
Yohei Sasaki
?
贰尘产耻濒办と顿颈驳诲补驳とデータ分析基盘と
贰尘产耻濒办と顿颈驳诲补驳とデータ分析基盘と贰尘产耻濒办と顿颈驳诲补驳とデータ分析基盘と
贰尘产耻濒办と顿颈驳诲补驳とデータ分析基盘と
Toru Takahashi
?

Viewers also liked (8)

C11,12 SQL Server 2012 Performance Tuning by Yukio Kumazawa
C11,12 SQL Server 2012 Performance Tuning by Yukio KumazawaC11,12 SQL Server 2012 Performance Tuning by Yukio Kumazawa
C11,12 SQL Server 2012 Performance Tuning by Yukio Kumazawa
Insight Technology, Inc.
?
An Internal of LINQ to Objects
An Internal of LINQ to ObjectsAn Internal of LINQ to Objects
An Internal of LINQ to Objects
Yoshifumi Kawai
?
ONOS Platform Architecture
ONOS Platform ArchitectureONOS Platform Architecture
ONOS Platform Architecture
OpenDaylight
?

Similar to 20071204 (20)

LINQ 概要 + 結構便利な LINQ to XML
LINQ 概要 + 結構便利な LINQ to XMLLINQ 概要 + 結構便利な LINQ to XML
LINQ 概要 + 結構便利な LINQ to XML
ShinichiAoyagi
?
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
Satoshi Nagayasu
?
Presto As A Service - Treasure DataでのPresto運用事例
Presto As A Service - Treasure DataでのPresto運用事例Presto As A Service - Treasure DataでのPresto運用事例
Presto As A Service - Treasure DataでのPresto運用事例
Taro L. Saito
?
第2章アーキテクチャ
第2章アーキテクチャ第2章アーキテクチャ
第2章アーキテクチャ
Kenta Hattori
?
Data-driven Design: 4つの技法 InfoPathを用いたスケーラブル SharePointソリューション
Data-driven Design: 4つの技法InfoPathを用いたスケーラブルSharePointソリューションData-driven Design: 4つの技法InfoPathを用いたスケーラブルSharePointソリューション
Data-driven Design: 4つの技法 InfoPathを用いたスケーラブル SharePointソリューション
JamesLRishe
?
[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2
Atsuo Yamasaki
?
Kapacitorでネットワークにおける リアルタイムイベント検出
Kapacitorでネットワークにおけるリアルタイムイベント検出Kapacitorでネットワークにおけるリアルタイムイベント検出
Kapacitorでネットワークにおける リアルタイムイベント検出
tetsusat
?
jjugccc2018 app review postmortem
jjugccc2018 app review postmortemjjugccc2018 app review postmortem
jjugccc2018 app review postmortem
tamtam180
?
Building asp.net core blazor and elasticsearch elasticsearch using visual stu...
Building asp.net core blazor and elasticsearch elasticsearch using visual stu...Building asp.net core blazor and elasticsearch elasticsearch using visual stu...
Building asp.net core blazor and elasticsearch elasticsearch using visual stu...
Shotaro Suzuki
?
Entity Framework 5.0 deep dive
Entity Framework 5.0 deep diveEntity Framework 5.0 deep dive
Entity Framework 5.0 deep dive
Atsushi Fukui
?
Web アプリケーションにおけるクライアントサイドのデータハンドリングと可視化の実現
Web アプリケーションにおけるクライアントサイドのデータハンドリングと可視化の実現Web アプリケーションにおけるクライアントサイドのデータハンドリングと可視化の実現
Web アプリケーションにおけるクライアントサイドのデータハンドリングと可視化の実現
インフラジスティックス?ジャパン株式会社
?
Jjug springセッション
Jjug springセッションJjug springセッション
Jjug springセッション
Yuichi Hasegawa
?
Azure Cosmos DB を使った高速分散アプリケーションの設計パターン
Azure Cosmos DB を使った高速分散アプリケーションの設計パターンAzure Cosmos DB を使った高速分散アプリケーションの設計パターン
Azure Cosmos DB を使った高速分散アプリケーションの設計パターン
Kazuyuki Miyake
?
[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ by トレジャーデータ株式会社 斉藤太郎
[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ  by トレジャーデータ株式会社 斉藤太郎[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ  by トレジャーデータ株式会社 斉藤太郎
[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ by トレジャーデータ株式会社 斉藤太郎
Insight Technology, Inc.
?
20160220 MSのビッグデータ分析基盤 - データマイニング+WEB@東京
20160220 MSのビッグデータ分析基盤 - データマイニング+WEB@東京20160220 MSのビッグデータ分析基盤 - データマイニング+WEB@東京
20160220 MSのビッグデータ分析基盤 - データマイニング+WEB@東京
Koichiro Sasaki
?
経済学のための実践的データ分析 4.SQL ことはじめ
経済学のための実践的データ分析 4.SQL ことはじめ経済学のための実践的データ分析 4.SQL ことはじめ
経済学のための実践的データ分析 4.SQL ことはじめ
Yasushi Hara
?
データベースシステム论02 - データベースの歴史と今
データベースシステム论02 - データベースの歴史と今データベースシステム论02 - データベースの歴史と今
データベースシステム论02 - データベースの歴史と今
Shohei Yokoyama
?
础奥厂で作る分析基盘
础奥厂で作る分析基盘础奥厂で作る分析基盘
础奥厂で作る分析基盘
Yu Otsubo
?
[Japan Tech summit 2017] DAL 005
[Japan Tech summit 2017] DAL 005[Japan Tech summit 2017] DAL 005
[Japan Tech summit 2017] DAL 005
Microsoft Tech Summit 2017
?
LINQ 概要 + 結構便利な LINQ to XML
LINQ 概要 + 結構便利な LINQ to XMLLINQ 概要 + 結構便利な LINQ to XML
LINQ 概要 + 結構便利な LINQ to XML
ShinichiAoyagi
?
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
Satoshi Nagayasu
?
Presto As A Service - Treasure DataでのPresto運用事例
Presto As A Service - Treasure DataでのPresto運用事例Presto As A Service - Treasure DataでのPresto運用事例
Presto As A Service - Treasure DataでのPresto運用事例
Taro L. Saito
?
第2章アーキテクチャ
第2章アーキテクチャ第2章アーキテクチャ
第2章アーキテクチャ
Kenta Hattori
?
Data-driven Design: 4つの技法 InfoPathを用いたスケーラブル SharePointソリューション
Data-driven Design: 4つの技法InfoPathを用いたスケーラブルSharePointソリューションData-driven Design: 4つの技法InfoPathを用いたスケーラブルSharePointソリューション
Data-driven Design: 4つの技法 InfoPathを用いたスケーラブル SharePointソリューション
JamesLRishe
?
[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2
Atsuo Yamasaki
?
Kapacitorでネットワークにおける リアルタイムイベント検出
Kapacitorでネットワークにおけるリアルタイムイベント検出Kapacitorでネットワークにおけるリアルタイムイベント検出
Kapacitorでネットワークにおける リアルタイムイベント検出
tetsusat
?
jjugccc2018 app review postmortem
jjugccc2018 app review postmortemjjugccc2018 app review postmortem
jjugccc2018 app review postmortem
tamtam180
?
Building asp.net core blazor and elasticsearch elasticsearch using visual stu...
Building asp.net core blazor and elasticsearch elasticsearch using visual stu...Building asp.net core blazor and elasticsearch elasticsearch using visual stu...
Building asp.net core blazor and elasticsearch elasticsearch using visual stu...
Shotaro Suzuki
?
Entity Framework 5.0 deep dive
Entity Framework 5.0 deep diveEntity Framework 5.0 deep dive
Entity Framework 5.0 deep dive
Atsushi Fukui
?
Web アプリケーションにおけるクライアントサイドのデータハンドリングと可視化の実現
Web アプリケーションにおけるクライアントサイドのデータハンドリングと可視化の実現Web アプリケーションにおけるクライアントサイドのデータハンドリングと可視化の実現
Web アプリケーションにおけるクライアントサイドのデータハンドリングと可視化の実現
インフラジスティックス?ジャパン株式会社
?
Azure Cosmos DB を使った高速分散アプリケーションの設計パターン
Azure Cosmos DB を使った高速分散アプリケーションの設計パターンAzure Cosmos DB を使った高速分散アプリケーションの設計パターン
Azure Cosmos DB を使った高速分散アプリケーションの設計パターン
Kazuyuki Miyake
?
[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ by トレジャーデータ株式会社 斉藤太郎
[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ  by トレジャーデータ株式会社 斉藤太郎[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ  by トレジャーデータ株式会社 斉藤太郎
[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ by トレジャーデータ株式会社 斉藤太郎
Insight Technology, Inc.
?
20160220 MSのビッグデータ分析基盤 - データマイニング+WEB@東京
20160220 MSのビッグデータ分析基盤 - データマイニング+WEB@東京20160220 MSのビッグデータ分析基盤 - データマイニング+WEB@東京
20160220 MSのビッグデータ分析基盤 - データマイニング+WEB@東京
Koichiro Sasaki
?
経済学のための実践的データ分析 4.SQL ことはじめ
経済学のための実践的データ分析 4.SQL ことはじめ経済学のための実践的データ分析 4.SQL ことはじめ
経済学のための実践的データ分析 4.SQL ことはじめ
Yasushi Hara
?
データベースシステム论02 - データベースの歴史と今
データベースシステム论02 - データベースの歴史と今データベースシステム论02 - データベースの歴史と今
データベースシステム论02 - データベースの歴史と今
Shohei Yokoyama
?
础奥厂で作る分析基盘
础奥厂で作る分析基盘础奥厂で作る分析基盘
础奥厂で作る分析基盘
Yu Otsubo
?

20071204

  • 1. LINQな世界への招待 Webアプリケーションボードリー ダ 小野修司(どっとねっとふぁん) VSUG DAY 2007.12.8
  • 2. LINQとは ? データ(オブジェクト)の集合から簡単な記述 で『必要なオブジェクト』の『必要なメンバ』 のみを『必要とする順序』で取り出せるように したシンタックスシュガー – 開発者は抽出条件、抽出するメンバ、抽出順序にの み関心を払う – 取り出すデータの型を用意したり、繰り返し文を書 いたりしない ? 定型的作業のタイピングの大幅な削減 ?クエリ式のサンプル: var query = from データ変数 in データの集合 where 抽出条件 orderby 抽出順序のキー項目 select 抽出するメンバ で構成される新しいクラス VSUG DAY 2007.12.8
  • 3. 対象となるデータ ? 配列、LIST<T>(LINQ to Object) – 独自に定義したオブジェクトや組み込みオブジェクト の集合 ? XMLファイル(LINQ to XML) – XDocument、XElement内のオブジェクトのツリー ? データベース(LINQ to SQL) – DataContext経由で取り出すTable<TEntity>オブジェク ト ? 対応するのはSQL Serverのみ ? Entity Data Model(LINQ to Entities) – Entity Frameworkによって生成されるオブジェクト ? Entity Frameworkは.NET Framework 3.5のリリースには含 まれていない VSUG DAY 2007.12.8
  • 4. LINQ to Object ? Peopleという名前の配列にName、 Genger、Ageプロパティを持つ匿名オブ ジェクトを持つ var query = from p in People where p.Gender == 1 orderby p.Age select new { p.Name, p.Age }; VSUG DAY 2007.12.8
  • 5. LINQ to XML ? PeopleというXElement変数にXMLファイルを読み込 む ? XMLファイルはPeople/Personという階層構造を持 ち、PersonノードにはName、Gender、Ageノードが 含まれる var query = from p in People.Descendants("Person") where (int)p.Element("Gender") == 1 orderby (int)p.Element("Age") select new { Name = (string)p.Element("Name"), Age = (int)p.Element(“Age”) }; VSUG DAY 2007.12.8
  • 6. LINQ to SQL ? ウィザードを利用してDataContextクラス、 Table<TEntity>クラスを作成している var query = from p in dtc.People where p.Gender == 1 orderby p.Age select new { p.Name, p.Age }; VSUG DAY 2007.12.8
  • 7. LINQの仕組み ー その1 ? クエリ式はラムダ式を引数にとる拡張メソッドが連結 された形式に変換される var query = from p in People where p.Gender == 1 orderby p.Age select new { p.Name, p.Age }; var query = People.Where(p => p.Gender == 1) .OrderBy(p => p.Age) .Select(p => new { p.Name, p.Age }); VSUG DAY 2007.12.8
  • 8. LINQの仕組み ー その2 ? 対象となるデータにより呼び出される拡張メソッ ドは変わる – 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<Tentity>がIQueryableを継承 ? ラムダ式の右辺を積んで式のツリー(Expression Tree)を 作成 ? IQuaryProviderによる実装 → 遅延実行 ? 継承して独自のLINQ to XXX といった仕組みを構築可能 VSUG DAY 2007.12.8
  • 9. LINQの仕組み ー その3 ? 遅延実行 – データが実際に必要となるタイミングまでクエリ条 件は積み重ねられていく ? LINQ to SQLでは積み重ねられたクエリでSQL文が生成 var query0 = from p in dtc.People where p.Gender == 1 select p; var query = from p in query0 where p.Age > 20 orderby p.Age select new { p.Name, p.Age }; SELECT [t0].[Name], [t0].[Age] FROM [dbo].[People] AS [t0] WHERE ([t0].[Age] > @p0) AND ([t0].[Gender] = @p1) ORDER BY [t0].[Age] VSUG DAY 2007.12.8
  • 10. LINQ to Objectの使いどころ ? Frameworkに組み込まれたデータを活用する – サンプル:ファイル内文字列検索 LINQ to XMLの使いどころ ? RSSで提供されるデータを利用する ? Webサービスで提供されるデータを利用する – XML特有の操作技術を覚える必要がない – XML文書の変形に利用することも可能 – サンプル:天気予報サービスの利用 VSUG DAY 2007.12.8
  • 11. LINQ to SQLの使いどころ ? データベース操作の標準化 – 生成されるSQL文はパラメータクエリとなる – 追加/更新/削除時には自動的にトランザクショ ンとなる ? 楽観的同時実行制御 – 全データチェック、timestampチェック等 ? DataContext.SubmitChanges() により実行される – 追加/更新/削除時の検証ロジックをまとめて管 理できる ? DataContextやエンティティクラスのpartialメソッドを 利用 – 追加/更新/削除はウィザードで作成されるクラ スの機能と考えるべき VSUG DAY 2007.12.8
  • 12. LINQによる異種データの結合 ? Object、XML、SQLをJOINすることは可 能 – バーチャルラボで確認できる – IEnumerableをベースに結合する ? 逆(IQuaryableベース)は不可 ? データベース連携の部分では全データを取り出し てから必要なものを抽出 – LINQ to SQLをIEnumerableベースで処理 ? DB連携時は無理に結合するより、最小限のデータ を取得するようクエリを分けたほうがよいかも – Containsメソッド等を利用して解決できる VSUG DAY 2007.12.8
  • 13. ASP.NETでのLINQ ? LinqDataSourceコントロールが追加 – LINQ to SQLだけでなく各種オブジェクトが利用 可能 – 自動で追加/更新/削除が可能 ? ListViewと組み合わせるとノンコーディングでデータ 管理ツールのできあがり ? 制限事項:LINQ to SQLを利用し、SELECTを使わない – 表示項目を制限したうえでの追加/更新/削除は プログラミングによって対応可能 ? ソートやページングの機能はノンコーディングで利用 可能 ? Extensionメソッドを利用した検証機能も利用可能 ? 同時実行制御は自分でプログラミング VSUG DAY 2007.12.8
  • 14. LINQな世界とは ? クエリ式がSQL文に似ているため、デー タベースとの連携が注目されがちだが、 LINQは本来必要なデータを手軽に抽出す るための技術である ? データの抽出はどんなプログラムにも存 在する。そこにどのようにLINQを使って いくかを考えるのがLINQな世界のプログ ラミング VSUG DAY 2007.12.8
  • 15. 参考情報 ? ビデオ – MSDN Nuggets ? http://www.microsoft.com/uk/msdn/nuggets/ ? C# 3.0:8本 LINQ to SQL:18本 LINQ to XML:6本 LINQ to Entities:5本 等 ? Blog – ScottGu Blog 翻訳 ? http://blogs.wankuma.com/chicasharp/ – Mike Taulty's Blog : LINQ? Single Step this code... ? http://mtaulty.com/CommunityServer/blogs/mike_taultys_blog/archive/2007/10/03/9842.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 VSUG DAY 2007.12.8