SlideShare una empresa de Scribd logo
1 de 15
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

Más contenido relacionado

La actualidad más candente

データベースシステム論05 - PostgreSQLのインストール
データベースシステム論05 - PostgreSQLのインストールデータベースシステム論05 - PostgreSQLのインストール
データベースシステム論05 - PostgreSQLのインストールShohei Yokoyama
 
実践 Reactive Extensions
実践 Reactive Extensions実践 Reactive Extensions
実践 Reactive ExtensionsShin Ise
 
データベースシステム論06 - SQL基礎演習1 データの定義と操作
データベースシステム論06 - SQL基礎演習1 データの定義と操作データベースシステム論06 - SQL基礎演習1 データの定義と操作
データベースシステム論06 - SQL基礎演習1 データの定義と操作Shohei Yokoyama
 
JavaScriptから利用するFirebase
JavaScriptから利用するFirebaseJavaScriptから利用するFirebase
JavaScriptから利用するFirebaseTakuji Shimokawa
 
データベースシステム論01 - ガイダンス
データベースシステム論01 - ガイダンスデータベースシステム論01 - ガイダンス
データベースシステム論01 - ガイダンスShohei Yokoyama
 
Datalogからsqlへの トランスレータを書いた話
Datalogからsqlへの トランスレータを書いた話Datalogからsqlへの トランスレータを書いた話
Datalogからsqlへの トランスレータを書いた話Yuki Takeichi
 
Kibanaでログを可視化してみた
Kibanaでログを可視化してみたKibanaでログを可視化してみた
Kibanaでログを可視化してみたDaigou Harada
 
それFluentdで! #fluentd
それFluentdで!  #fluentdそれFluentdで!  #fluentd
それFluentdで! #fluentdAtsuko 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
 
ElasticSearch+Kibanaでログデータの検索と視覚化を実現するテクニックと運用ノウハウ
ElasticSearch+Kibanaでログデータの検索と視覚化を実現するテクニックと運用ノウハウElasticSearch+Kibanaでログデータの検索と視覚化を実現するテクニックと運用ノウハウ
ElasticSearch+Kibanaでログデータの検索と視覚化を実現するテクニックと運用ノウハウ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 DbMakoto Ohnami
 
alieaters_tokyo_20200325_yoshimura
alieaters_tokyo_20200325_yoshimuraalieaters_tokyo_20200325_yoshimura
alieaters_tokyo_20200325_yoshimuraMasaki Yoshimura
 
GeneratingWikipedia_ICLR18_論文紹介
GeneratingWikipedia_ICLR18_論文紹介GeneratingWikipedia_ICLR18_論文紹介
GeneratingWikipedia_ICLR18_論文紹介Masayoshi Kondo
 
今更だけどSqLite触ってみたよ
今更だけどSqLite触ってみたよ今更だけどSqLite触ってみたよ
今更だけどSqLite触ってみたよKeisuke Oohata
 
CouchDB JP & BigCouch
CouchDB JP & BigCouchCouchDB JP & BigCouch
CouchDB JP & BigCouchYohei Sasaki
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とToru Takahashi
 

La actualidad más candente (20)

データベースシステム論05 - PostgreSQLのインストール
データベースシステム論05 - PostgreSQLのインストールデータベースシステム論05 - PostgreSQLのインストール
データベースシステム論05 - PostgreSQLのインストール
 
実践 Reactive Extensions
実践 Reactive Extensions実践 Reactive Extensions
実践 Reactive Extensions
 
データベースシステム論06 - SQL基礎演習1 データの定義と操作
データベースシステム論06 - SQL基礎演習1 データの定義と操作データベースシステム論06 - SQL基礎演習1 データの定義と操作
データベースシステム論06 - SQL基礎演習1 データの定義と操作
 
20120721_ishkawa
20120721_ishkawa20120721_ishkawa
20120721_ishkawa
 
JavaScriptから利用するFirebase
JavaScriptから利用するFirebaseJavaScriptから利用するFirebase
JavaScriptから利用するFirebase
 
データベースシステム論01 - ガイダンス
データベースシステム論01 - ガイダンスデータベースシステム論01 - ガイダンス
データベースシステム論01 - ガイダンス
 
Datalogからsqlへの トランスレータを書いた話
Datalogからsqlへの トランスレータを書いた話Datalogからsqlへの トランスレータを書いた話
Datalogからsqlへの トランスレータを書いた話
 
Kibanaでログを可視化してみた
Kibanaでログを可視化してみたKibanaでログを可視化してみた
Kibanaでログを可視化してみた
 
それFluentdで! #fluentd
それFluentdで!  #fluentdそれFluentdで!  #fluentd
それFluentdで! #fluentd
 
サイボウズ・ラボ成果発表会
サイボウズ・ラボ成果発表会サイボウズ・ラボ成果発表会
サイボウズ・ラボ成果発表会
 
[DLHacks LT] PytorchのDataLoader -torchtextのソースコードを読んでみた-
[DLHacks LT] PytorchのDataLoader -torchtextのソースコードを読んでみた-[DLHacks LT] PytorchのDataLoader -torchtextのソースコードを読んでみた-
[DLHacks LT] PytorchのDataLoader -torchtextのソースコードを読んでみた-
 
ElasticSearch+Kibanaでログデータの検索と視覚化を実現するテクニックと運用ノウハウ
ElasticSearch+Kibanaでログデータの検索と視覚化を実現するテクニックと運用ノウハウElasticSearch+Kibanaでログデータの検索と視覚化を実現するテクニックと運用ノウハウ
ElasticSearch+Kibanaでログデータの検索と視覚化を実現するテクニックと運用ノウハウ
 
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
 
alieaters_tokyo_20200325_yoshimura
alieaters_tokyo_20200325_yoshimuraalieaters_tokyo_20200325_yoshimura
alieaters_tokyo_20200325_yoshimura
 
MongoDB勉強会資料
MongoDB勉強会資料MongoDB勉強会資料
MongoDB勉強会資料
 
GeneratingWikipedia_ICLR18_論文紹介
GeneratingWikipedia_ICLR18_論文紹介GeneratingWikipedia_ICLR18_論文紹介
GeneratingWikipedia_ICLR18_論文紹介
 
今更だけどSqLite触ってみたよ
今更だけどSqLite触ってみたよ今更だけどSqLite触ってみたよ
今更だけどSqLite触ってみたよ
 
CouchDB JP & BigCouch
CouchDB JP & BigCouchCouchDB JP & BigCouch
CouchDB JP & BigCouch
 
Tarantalk
TarantalkTarantalk
Tarantalk
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤と
 

Destacado (8)

20120609
2012060920120609
20120609
 
20120425
2012042520120425
20120425
 
20120616
2012061620120616
20120616
 
20121215
2012121520121215
20121215
 
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
 
20140322
2014032220140322
20140322
 
An Internal of LINQ to Objects
An Internal of LINQ to ObjectsAn Internal of LINQ to Objects
An Internal of LINQ to Objects
 
ONOS Platform Architecture
ONOS Platform ArchitectureONOS Platform Architecture
ONOS Platform Architecture
 

Similar a 20071204

LINQ 概要 + 結構便利な LINQ to XML
LINQ 概要 + 結構便利な LINQ to XMLLINQ 概要 + 結構便利な LINQ to XML
LINQ 概要 + 結構便利な LINQ to XMLShinichiAoyagi
 
アナリティクスを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 勉強会 #2Atsuo Yamasaki
 
Kapacitorでネットワークにおける リアルタイムイベント検出
Kapacitorでネットワークにおけるリアルタイムイベント検出Kapacitorでネットワークにおけるリアルタイムイベント検出
Kapacitorでネットワークにおける リアルタイムイベント検出tetsusat
 
jjugccc2018 app review postmortem
jjugccc2018 app review postmortemjjugccc2018 app review postmortem
jjugccc2018 app review postmortemtamtam180
 
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 diveAtsushi 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
 
AWSで作る分析基盤
AWSで作る分析基盤AWSで作る分析基盤
AWSで作る分析基盤Yu Otsubo
 

Similar a 20071204 (20)

LINQ 概要 + 結構便利な LINQ to XML
LINQ 概要 + 結構便利な LINQ to XMLLINQ 概要 + 結構便利な LINQ to XML
LINQ 概要 + 結構便利な LINQ to XML
 
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
 
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運用事例
 
第2章アーキテクチャ
第2章アーキテクチャ第2章アーキテクチャ
第2章アーキテクチャ
 
Data-driven Design: 4つの技法 InfoPathを用いたスケーラブル SharePointソリューション
Data-driven Design: 4つの技法InfoPathを用いたスケーラブルSharePointソリューションData-driven Design: 4つの技法InfoPathを用いたスケーラブルSharePointソリューション
Data-driven Design: 4つの技法 InfoPathを用いたスケーラブル SharePointソリューション
 
[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2
 
Kapacitorでネットワークにおける リアルタイムイベント検出
Kapacitorでネットワークにおけるリアルタイムイベント検出Kapacitorでネットワークにおけるリアルタイムイベント検出
Kapacitorでネットワークにおける リアルタイムイベント検出
 
BPStudy20121221
BPStudy20121221BPStudy20121221
BPStudy20121221
 
jjugccc2018 app review postmortem
jjugccc2018 app review postmortemjjugccc2018 app review postmortem
jjugccc2018 app review postmortem
 
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...
 
Entity Framework 5.0 deep dive
Entity Framework 5.0 deep diveEntity Framework 5.0 deep dive
Entity Framework 5.0 deep dive
 
Web アプリケーションにおけるクライアントサイドのデータハンドリングと可視化の実現
Web アプリケーションにおけるクライアントサイドのデータハンドリングと可視化の実現Web アプリケーションにおけるクライアントサイドのデータハンドリングと可視化の実現
Web アプリケーションにおけるクライアントサイドのデータハンドリングと可視化の実現
 
Jjug springセッション
Jjug springセッションJjug springセッション
Jjug springセッション
 
Azure Cosmos DB を使った高速分散アプリケーションの設計パターン
Azure Cosmos DB を使った高速分散アプリケーションの設計パターンAzure Cosmos DB を使った高速分散アプリケーションの設計パターン
Azure Cosmos DB を使った高速分散アプリケーションの設計パターン
 
[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 トレジャーデータ株式会社 斉藤太郎
 
20160220 MSのビッグデータ分析基盤 - データマイニング+WEB@東京
20160220 MSのビッグデータ分析基盤 - データマイニング+WEB@東京20160220 MSのビッグデータ分析基盤 - データマイニング+WEB@東京
20160220 MSのビッグデータ分析基盤 - データマイニング+WEB@東京
 
経済学のための実践的データ分析 4.SQL ことはじめ
経済学のための実践的データ分析 4.SQL ことはじめ経済学のための実践的データ分析 4.SQL ことはじめ
経済学のための実践的データ分析 4.SQL ことはじめ
 
データベースシステム論02 - データベースの歴史と今
データベースシステム論02 - データベースの歴史と今データベースシステム論02 - データベースの歴史と今
データベースシステム論02 - データベースの歴史と今
 
AWSで作る分析基盤
AWSで作る分析基盤AWSで作る分析基盤
AWSで作る分析基盤
 
[Japan Tech summit 2017] DAL 005
[Japan Tech summit 2017] DAL 005[Japan Tech summit 2017] DAL 005
[Japan Tech summit 2017] DAL 005
 

Más de 小野 修司 (20)

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
 
20080627 2
20080627 220080627 2
20080627 2
 
20080627 1
20080627 120080627 1
20080627 1
 
20080524
2008052420080524
20080524
 
20080213
2008021320080213
20080213
 
20071030
2007103020071030
20071030
 

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