SlideShare a Scribd company logo
青柳 臣一 @ShinichiAoyagi
LINQ の概要とかもろもろ
LINQ 勉強会
VSハッカソン倶楽部勉強会 大阪 第2回
2013/6/29(土)
• 青柳 臣一(あおやぎ しんいち)
@ShinichiAoyagi
http://shinichiaoyagi.blogspot.jp/
• 職業 C# やら VB やら WPF やらでソフトウエア開発
最近はスマホとか
あと PHP + MySQL で SNS 作ったり
自己紹介
• Language-Integrated Query
• クエリー機能を言語に統合
• クエリーは SQL とかのクエリー
「問い合わせ」
• Visual Studio 2008(.NET Framework
3.0)で搭載
LINQ
• C# や VB で SQL みたいな書き方ができる
• let、join、group、orderby など一通りのこ
とはできる
クエリー式
var array = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var q = from x in array
where x % 2 == 0
select x;
Dim array() = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
Dim q = From x In array
Where x Mod 2 = 0
Select x
• すべてクエリー式を使わない形に変換可
能
クエリー式はシンタックスシュガー
var q = array
.Where(x => x % 2 == 0)
.Select(x => x);
Dim q = array.
Where(Function(x) x Mod 2 = 0).
Select(Function(x) x)
• VS 2008 のときの追加機能は LINQ のた
め
• 暗黙的な型指定(var、Dim)
• 拡張メソッド
• ラムダ式
• 匿名クラス
• オブジェクト初期化子、コレクション初
期化子
すべては LINQ のために (1)
すべては LINQ のために (2)
var people = new[]
{
new Person() { Name = “太郎", Age = 14, },
new Person() { Name = “花子", Age = 17, },
};
var q = people
.Where(x => x.Age <= 15)
.Select(x => new { x.Name });
var
コレクション初期化子
オブジェクト初期化子
拡張メソッド
ラムダ式
匿名クラス
すべては LINQ のために (3)
Dim people() =
{
New Person() With {.Name = “太郎", .Age = 15},
New Person() With {.Name = “花子", .Age = 14}
}
Dim q = people.
Where(Function(x) x.Age <= 15).
Select(Function(x) New With {x.Name})
var
コレクション初期化子
オブジェクト初期化子
拡張メソッド
ラムダ式
匿名クラス
• IEnumerable
– 配列やコレクションは IEnumerable を実装し
ている
• だから
– System.Linq.Enumerable
LINQ to Objects (1)
public static IEnumerable<TSource> Where<TSource>(
this IEnumerable<TSource> source,
Func<TSource, bool> predicate);
public static IEnumerable<TSource> Where<TSource>(
this IEnumerable<TSource> source,
Func<TSource, int, bool> predicate);
• System.Linq.Enumerable.Where
LINQ to Objects (2)
public static IEnumerable<TSource> Where<TSource>(
this IEnumerable<TSource> source,
Func<TSource, bool> predicate)
{
foreach (var item in source)
{
if (predicate(item))
{
yield return item;
}
}
}
• 要するに for や foreach になります
↑
ちょっと乱暴
LINQ to Objects (3)
• XElement 族
LINQ to XML (1)
var xml =
new XElement("People",
new XElement("Person",
new XElement(“Name”, “太郎"),
new XElement("Age", 15)
),
new XElement("Person",
new XElement(“Name”, “花子"),
new XElement("Age", 14)
)
);
LINQ to XML (2)
var q = xml.Descendants("Person")
.Where(x => (int)x.Element("Age") <= 15);
var q = xml.Descendants("Person")
.Where(x =>
((int?)x.Element("Age") ?? int.MaxValue) <= 15);
xml.Descendants("Person").Max(x =>
(int?)x.Element("Age"))
• VB は変態すぎてちょっと、、、
LINQ to XML (3)
Dim xml = _
<People>
<Person>
<Name>太郎</Name>
<Age>15</Age>
</Person>
<Person>
<Name>花子</Name>
<Age>14</Age>
</Person>
</People>
• VB は変態すぎてちょっと、、、
LINQ to XML (4)
Dim q = From x In xml...<Person>
Where x.<Age>.Value <= 15
Order By x.<Age>.Value
Select x.<Name>
• 見た目は LINQ to Objects とほぼ同じ
LINQ to SQL (1)
var db = new DataClasses1DataContext();
var q = from x in db.People
where x.Age <= 15
select x.Name;
var db = new DataClasses1DataContext();
var q = db.People
.Where(x => x.Age <= 15)
.Select(x => x.Name);
• テーブルとかは IQueryable
• だから
– System.Linq.Queryable
LINQ to SQL (2)
public static IQueryable<TSource> Where<TSource>(
this IQueryable<TSource> source,
Expression<Func<TSource, bool>> predicate);
public static IQueryable<TSource> Where<TSource>(
this IQueryable<TSource> source,
Expression<Func<TSource, int, bool>> predicate);
• Expression って?
– 型(int や string と同じく一級市民の型)
– System.Linq.Expressions.Expression<TDeledate> クラスの
こと
• 実行コードをデータとして表現したもの
• 暗黙の型変換
– ラムダ式は暗黙に Expression 型に変換できる
– 1 を 1.0 に暗黙に変換できるように
“x => x % 2 == 0” をこのラムダ式の内容を表す
Expression 型に変換できる
LINQ to SQL (3)
• コンパイル時にすること
– ラムダ式を Expression 型に変換するコード
を作り出す
• 実行時(列挙したとき)にすること
– Expression 型を元に SQL 文を作ったりして
実行
LINQ to SQL (4)
ぐるぐる回すもの
LINQ とは
• ぐるぐる回らない LINQ(笑)
• 非同期やイベントドリブンなものを
LINQ っぽく扱えるようにするもの
Reactive Extensions (Rx)

More Related Content

What's hot

chapter6
chapter6chapter6
chapter6
ymk0424
 
Python Project (2)
Python Project (2)Python Project (2)
Python Project (2)
Tatsuya Nakamura
 
15分でざっくり分かるScala入門
15分でざっくり分かるScala入門15分でざっくり分かるScala入門
15分でざっくり分かるScala入門
SatoYu1ro
 
Objective-Cのいろいろな反復処理
Objective-Cのいろいろな反復処理Objective-Cのいろいろな反復処理
Objective-Cのいろいろな反復処理
Kosuke Ogawa
 
OSSから学ぶSwift実践テクニック
OSSから学ぶSwift実践テクニックOSSから学ぶSwift実践テクニック
OSSから学ぶSwift実践テクニック
庸介 高橋
 
20161127 doradora09 japanr2016_lt
20161127 doradora09 japanr2016_lt20161127 doradora09 japanr2016_lt
20161127 doradora09 japanr2016_lt
Nobuaki Oshiro
 
LastaFluteでKotlinをはじめよう
LastaFluteでKotlinをはじめようLastaFluteでKotlinをはじめよう
LastaFluteでKotlinをはじめよう
Shinsuke Sugaya
 
Representation Learning Using Multi-Task Deep Neural Networks
for Semantic Cl...
Representation Learning Using Multi-Task Deep Neural Networks
for Semantic Cl...Representation Learning Using Multi-Task Deep Neural Networks
for Semantic Cl...
Representation Learning Using Multi-Task Deep Neural Networks
for Semantic Cl...
marujirou
 
AutoEncoderで特徴抽出
AutoEncoderで特徴抽出AutoEncoderで特徴抽出
AutoEncoderで特徴抽出
Kai Sasaki
 
Datalogからsqlへの トランスレータを書いた話
Datalogからsqlへの トランスレータを書いた話Datalogからsqlへの トランスレータを書いた話
Datalogからsqlへの トランスレータを書いた話
Yuki Takeichi
 
GeneratingWikipedia_ICLR18_論文紹介
GeneratingWikipedia_ICLR18_論文紹介GeneratingWikipedia_ICLR18_論文紹介
GeneratingWikipedia_ICLR18_論文紹介
Masayoshi Kondo
 
WebAppDev勉強会 #2 at cafe? IKAGAWA DO
WebAppDev勉強会 #2 at cafe? IKAGAWA DOWebAppDev勉強会 #2 at cafe? IKAGAWA DO
WebAppDev勉強会 #2 at cafe? IKAGAWA DOKohei Noda
 
SL(2,Z)の元の生成シミュレーション
SL(2,Z)の元の生成シミュレーションSL(2,Z)の元の生成シミュレーション
SL(2,Z)の元の生成シミュレーション
Yuri Mizushima
 
あなたのScalaを爆速にする7つの方法(日本語版)
あなたのScalaを爆速にする7つの方法(日本語版)あなたのScalaを爆速にする7つの方法(日本語版)
あなたのScalaを爆速にする7つの方法(日本語版)
x1 ichi
 

What's hot (14)

chapter6
chapter6chapter6
chapter6
 
Python Project (2)
Python Project (2)Python Project (2)
Python Project (2)
 
15分でざっくり分かるScala入門
15分でざっくり分かるScala入門15分でざっくり分かるScala入門
15分でざっくり分かるScala入門
 
Objective-Cのいろいろな反復処理
Objective-Cのいろいろな反復処理Objective-Cのいろいろな反復処理
Objective-Cのいろいろな反復処理
 
OSSから学ぶSwift実践テクニック
OSSから学ぶSwift実践テクニックOSSから学ぶSwift実践テクニック
OSSから学ぶSwift実践テクニック
 
20161127 doradora09 japanr2016_lt
20161127 doradora09 japanr2016_lt20161127 doradora09 japanr2016_lt
20161127 doradora09 japanr2016_lt
 
LastaFluteでKotlinをはじめよう
LastaFluteでKotlinをはじめようLastaFluteでKotlinをはじめよう
LastaFluteでKotlinをはじめよう
 
Representation Learning Using Multi-Task Deep Neural Networks
for Semantic Cl...
Representation Learning Using Multi-Task Deep Neural Networks
for Semantic Cl...Representation Learning Using Multi-Task Deep Neural Networks
for Semantic Cl...
Representation Learning Using Multi-Task Deep Neural Networks
for Semantic Cl...
 
AutoEncoderで特徴抽出
AutoEncoderで特徴抽出AutoEncoderで特徴抽出
AutoEncoderで特徴抽出
 
Datalogからsqlへの トランスレータを書いた話
Datalogからsqlへの トランスレータを書いた話Datalogからsqlへの トランスレータを書いた話
Datalogからsqlへの トランスレータを書いた話
 
GeneratingWikipedia_ICLR18_論文紹介
GeneratingWikipedia_ICLR18_論文紹介GeneratingWikipedia_ICLR18_論文紹介
GeneratingWikipedia_ICLR18_論文紹介
 
WebAppDev勉強会 #2 at cafe? IKAGAWA DO
WebAppDev勉強会 #2 at cafe? IKAGAWA DOWebAppDev勉強会 #2 at cafe? IKAGAWA DO
WebAppDev勉強会 #2 at cafe? IKAGAWA DO
 
SL(2,Z)の元の生成シミュレーション
SL(2,Z)の元の生成シミュレーションSL(2,Z)の元の生成シミュレーション
SL(2,Z)の元の生成シミュレーション
 
あなたのScalaを爆速にする7つの方法(日本語版)
あなたのScalaを爆速にする7つの方法(日本語版)あなたのScalaを爆速にする7つの方法(日本語版)
あなたのScalaを爆速にする7つの方法(日本語版)
 

Similar to LINQ の概要とかもろもろ

Boost.Spirit.QiとLLVM APIで遊ぼう
Boost.Spirit.QiとLLVM APIで遊ぼうBoost.Spirit.QiとLLVM APIで遊ぼう
Boost.Spirit.QiとLLVM APIで遊ぼう
nvsofts
 
10分で分かるr言語入門ver2.14 15 0905
10分で分かるr言語入門ver2.14 15 090510分で分かるr言語入門ver2.14 15 0905
10分で分かるr言語入門ver2.14 15 0905
Nobuaki Oshiro
 
Phpcon2015
Phpcon2015Phpcon2015
Phpcon2015
Hiroshi Tokumaru
 
20140903groonga発表資料
20140903groonga発表資料20140903groonga発表資料
20140903groonga発表資料
Hironobu Saitoh
 
[Developers Summit 2017] MicrosoftのAI開発機能/サービス
[Developers Summit 2017] MicrosoftのAI開発機能/サービス[Developers Summit 2017] MicrosoftのAI開発機能/サービス
[Developers Summit 2017] MicrosoftのAI開発機能/サービス
Naoki (Neo) SATO
 
⑲jQueryをおぼえよう!その5
⑲jQueryをおぼえよう!その5⑲jQueryをおぼえよう!その5
⑲jQueryをおぼえよう!その5
Nishida Kansuke
 
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
泰 増田
 
[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2
Atsuo Yamasaki
 
Cocoa勉強会#6-SQLiteをCocoaで使う
Cocoa勉強会#6-SQLiteをCocoaで使うCocoa勉強会#6-SQLiteをCocoaで使う
Cocoa勉強会#6-SQLiteをCocoaで使う
Masayuki Nii
 
C# LINQ ~深く知って、使いまくろう~
C# LINQ ~深く知って、使いまくろう~C# LINQ ~深く知って、使いまくろう~
C# LINQ ~深く知って、使いまくろう~
Fujio Kojima
 
Osc2015 hokkaido postgresql-semi-stuructured-datatype
Osc2015 hokkaido postgresql-semi-stuructured-datatypeOsc2015 hokkaido postgresql-semi-stuructured-datatype
Osc2015 hokkaido postgresql-semi-stuructured-datatype
Toshi Harada
 
10分で分かるr言語入門ver2.15 15 1010
10分で分かるr言語入門ver2.15 15 101010分で分かるr言語入門ver2.15 15 1010
10分で分かるr言語入門ver2.15 15 1010
Nobuaki Oshiro
 
mysqlftppc 紹介
mysqlftppc 紹介mysqlftppc 紹介
mysqlftppc 紹介
Hiroaki Kawai
 
Infrastructure as code LT AWS + Ansibleのお悩み相談
Infrastructure as code LT AWS + Ansibleのお悩み相談Infrastructure as code LT AWS + Ansibleのお悩み相談
Infrastructure as code LT AWS + Ansibleのお悩み相談
Seiichiro Ishida
 
20170708 Ebeanのご紹介(O/Rマッパー勉強会 in 大都会)
20170708 Ebeanのご紹介(O/Rマッパー勉強会 in 大都会)20170708 Ebeanのご紹介(O/Rマッパー勉強会 in 大都会)
20170708 Ebeanのご紹介(O/Rマッパー勉強会 in 大都会)
kunst1080
 
シェル芸で使いたくてLINQが使えるコマンドを作ったらawkでよかった話
シェル芸で使いたくてLINQが使えるコマンドを作ったらawkでよかった話シェル芸で使いたくてLINQが使えるコマンドを作ったらawkでよかった話
シェル芸で使いたくてLINQが使えるコマンドを作ったらawkでよかった話
xztaityozx
 
GDG Tokyo Firebaseを使った Androidアプリ開発
GDG Tokyo Firebaseを使った Androidアプリ開発GDG Tokyo Firebaseを使った Androidアプリ開発
GDG Tokyo Firebaseを使った Androidアプリ開発
Fumihiko Shiroyama
 
Wtm
WtmWtm
Visual Studio 2008による 開発環境・プログラミングの進化
Visual Studio 2008による 開発環境・プログラミングの進化Visual Studio 2008による 開発環境・プログラミングの進化
Visual Studio 2008による 開発環境・プログラミングの進化
Fujio Kojima
 

Similar to LINQ の概要とかもろもろ (20)

Boost.Spirit.QiとLLVM APIで遊ぼう
Boost.Spirit.QiとLLVM APIで遊ぼうBoost.Spirit.QiとLLVM APIで遊ぼう
Boost.Spirit.QiとLLVM APIで遊ぼう
 
10分で分かるr言語入門ver2.14 15 0905
10分で分かるr言語入門ver2.14 15 090510分で分かるr言語入門ver2.14 15 0905
10分で分かるr言語入門ver2.14 15 0905
 
Phpcon2015
Phpcon2015Phpcon2015
Phpcon2015
 
20140903groonga発表資料
20140903groonga発表資料20140903groonga発表資料
20140903groonga発表資料
 
RとWeb API
RとWeb APIRとWeb API
RとWeb API
 
[Developers Summit 2017] MicrosoftのAI開発機能/サービス
[Developers Summit 2017] MicrosoftのAI開発機能/サービス[Developers Summit 2017] MicrosoftのAI開発機能/サービス
[Developers Summit 2017] MicrosoftのAI開発機能/サービス
 
⑲jQueryをおぼえよう!その5
⑲jQueryをおぼえよう!その5⑲jQueryをおぼえよう!その5
⑲jQueryをおぼえよう!その5
 
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
 
[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2
 
Cocoa勉強会#6-SQLiteをCocoaで使う
Cocoa勉強会#6-SQLiteをCocoaで使うCocoa勉強会#6-SQLiteをCocoaで使う
Cocoa勉強会#6-SQLiteをCocoaで使う
 
C# LINQ ~深く知って、使いまくろう~
C# LINQ ~深く知って、使いまくろう~C# LINQ ~深く知って、使いまくろう~
C# LINQ ~深く知って、使いまくろう~
 
Osc2015 hokkaido postgresql-semi-stuructured-datatype
Osc2015 hokkaido postgresql-semi-stuructured-datatypeOsc2015 hokkaido postgresql-semi-stuructured-datatype
Osc2015 hokkaido postgresql-semi-stuructured-datatype
 
10分で分かるr言語入門ver2.15 15 1010
10分で分かるr言語入門ver2.15 15 101010分で分かるr言語入門ver2.15 15 1010
10分で分かるr言語入門ver2.15 15 1010
 
mysqlftppc 紹介
mysqlftppc 紹介mysqlftppc 紹介
mysqlftppc 紹介
 
Infrastructure as code LT AWS + Ansibleのお悩み相談
Infrastructure as code LT AWS + Ansibleのお悩み相談Infrastructure as code LT AWS + Ansibleのお悩み相談
Infrastructure as code LT AWS + Ansibleのお悩み相談
 
20170708 Ebeanのご紹介(O/Rマッパー勉強会 in 大都会)
20170708 Ebeanのご紹介(O/Rマッパー勉強会 in 大都会)20170708 Ebeanのご紹介(O/Rマッパー勉強会 in 大都会)
20170708 Ebeanのご紹介(O/Rマッパー勉強会 in 大都会)
 
シェル芸で使いたくてLINQが使えるコマンドを作ったらawkでよかった話
シェル芸で使いたくてLINQが使えるコマンドを作ったらawkでよかった話シェル芸で使いたくてLINQが使えるコマンドを作ったらawkでよかった話
シェル芸で使いたくてLINQが使えるコマンドを作ったらawkでよかった話
 
GDG Tokyo Firebaseを使った Androidアプリ開発
GDG Tokyo Firebaseを使った Androidアプリ開発GDG Tokyo Firebaseを使った Androidアプリ開発
GDG Tokyo Firebaseを使った Androidアプリ開発
 
Wtm
WtmWtm
Wtm
 
Visual Studio 2008による 開発環境・プログラミングの進化
Visual Studio 2008による 開発環境・プログラミングの進化Visual Studio 2008による 開発環境・プログラミングの進化
Visual Studio 2008による 開発環境・プログラミングの進化
 

More from ShinichiAoyagi

WPF & Windows Forms on .NET Core 3.0
WPF & Windows Forms on .NET Core 3.0WPF & Windows Forms on .NET Core 3.0
WPF & Windows Forms on .NET Core 3.0
ShinichiAoyagi
 
【18-C-5】C# で iOS/Androidアプリ開発 - Visual Studio 2015 + Xamarin + MVVMCross -
【18-C-5】C# で iOS/Androidアプリ開発 - Visual Studio 2015 + Xamarin + MVVMCross -【18-C-5】C# で iOS/Androidアプリ開発 - Visual Studio 2015 + Xamarin + MVVMCross -
【18-C-5】C# で iOS/Androidアプリ開発 - Visual Studio 2015 + Xamarin + MVVMCross -
ShinichiAoyagi
 
Visual Studio 2015 + Xamarin
Visual Studio 2015 + XamarinVisual Studio 2015 + Xamarin
Visual Studio 2015 + Xamarin
ShinichiAoyagi
 
Xamarin+MVVMCross のあれこれ
Xamarin+MVVMCross のあれこれXamarin+MVVMCross のあれこれ
Xamarin+MVVMCross のあれこれ
ShinichiAoyagi
 
うるう秒とタイムゾーン
うるう秒とタイムゾーンうるう秒とタイムゾーン
うるう秒とタイムゾーン
ShinichiAoyagi
 
XAML 入門
XAML 入門XAML 入門
XAML 入門
ShinichiAoyagi
 
C# と .NET と ・・・
C# と .NET と ・・・C# と .NET と ・・・
C# と .NET と ・・・
ShinichiAoyagi
 
Windows ストアーアプリで SQLite を使ってみよう
Windows ストアーアプリで SQLite を使ってみようWindows ストアーアプリで SQLite を使ってみよう
Windows ストアーアプリで SQLite を使ってみよう
ShinichiAoyagi
 
WindowsストアーアプリでSharpDXを動かしてみる
WindowsストアーアプリでSharpDXを動かしてみるWindowsストアーアプリでSharpDXを動かしてみる
WindowsストアーアプリでSharpDXを動かしてみる
ShinichiAoyagi
 
“なめらか”なメトロスタイルアプリを作るために ~WinRT の非同期性を活用したアプリ開発~
“なめらか”なメトロスタイルアプリを作るために ~WinRT の非同期性を活用したアプリ開発~“なめらか”なメトロスタイルアプリを作るために ~WinRT の非同期性を活用したアプリ開発~
“なめらか”なメトロスタイルアプリを作るために ~WinRT の非同期性を活用したアプリ開発~
ShinichiAoyagi
 
メトロスタイルアプリ開発 最初の一歩
メトロスタイルアプリ開発最初の一歩メトロスタイルアプリ開発最初の一歩
メトロスタイルアプリ開発 最初の一歩
ShinichiAoyagi
 
メトロスタイルってなに?
メトロスタイルってなに?メトロスタイルってなに?
メトロスタイルってなに?
ShinichiAoyagi
 
ついに日本上陸!Windows Phone 7.5 アプリケーション開発
ついに日本上陸!Windows Phone 7.5 アプリケーション開発ついに日本上陸!Windows Phone 7.5 アプリケーション開発
ついに日本上陸!Windows Phone 7.5 アプリケーション開発
ShinichiAoyagi
 

More from ShinichiAoyagi (13)

WPF & Windows Forms on .NET Core 3.0
WPF & Windows Forms on .NET Core 3.0WPF & Windows Forms on .NET Core 3.0
WPF & Windows Forms on .NET Core 3.0
 
【18-C-5】C# で iOS/Androidアプリ開発 - Visual Studio 2015 + Xamarin + MVVMCross -
【18-C-5】C# で iOS/Androidアプリ開発 - Visual Studio 2015 + Xamarin + MVVMCross -【18-C-5】C# で iOS/Androidアプリ開発 - Visual Studio 2015 + Xamarin + MVVMCross -
【18-C-5】C# で iOS/Androidアプリ開発 - Visual Studio 2015 + Xamarin + MVVMCross -
 
Visual Studio 2015 + Xamarin
Visual Studio 2015 + XamarinVisual Studio 2015 + Xamarin
Visual Studio 2015 + Xamarin
 
Xamarin+MVVMCross のあれこれ
Xamarin+MVVMCross のあれこれXamarin+MVVMCross のあれこれ
Xamarin+MVVMCross のあれこれ
 
うるう秒とタイムゾーン
うるう秒とタイムゾーンうるう秒とタイムゾーン
うるう秒とタイムゾーン
 
XAML 入門
XAML 入門XAML 入門
XAML 入門
 
C# と .NET と ・・・
C# と .NET と ・・・C# と .NET と ・・・
C# と .NET と ・・・
 
Windows ストアーアプリで SQLite を使ってみよう
Windows ストアーアプリで SQLite を使ってみようWindows ストアーアプリで SQLite を使ってみよう
Windows ストアーアプリで SQLite を使ってみよう
 
WindowsストアーアプリでSharpDXを動かしてみる
WindowsストアーアプリでSharpDXを動かしてみるWindowsストアーアプリでSharpDXを動かしてみる
WindowsストアーアプリでSharpDXを動かしてみる
 
“なめらか”なメトロスタイルアプリを作るために ~WinRT の非同期性を活用したアプリ開発~
“なめらか”なメトロスタイルアプリを作るために ~WinRT の非同期性を活用したアプリ開発~“なめらか”なメトロスタイルアプリを作るために ~WinRT の非同期性を活用したアプリ開発~
“なめらか”なメトロスタイルアプリを作るために ~WinRT の非同期性を活用したアプリ開発~
 
メトロスタイルアプリ開発 最初の一歩
メトロスタイルアプリ開発最初の一歩メトロスタイルアプリ開発最初の一歩
メトロスタイルアプリ開発 最初の一歩
 
メトロスタイルってなに?
メトロスタイルってなに?メトロスタイルってなに?
メトロスタイルってなに?
 
ついに日本上陸!Windows Phone 7.5 アプリケーション開発
ついに日本上陸!Windows Phone 7.5 アプリケーション開発ついに日本上陸!Windows Phone 7.5 アプリケーション開発
ついに日本上陸!Windows Phone 7.5 アプリケーション開発
 

Recently uploaded

LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
chiefujita1
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
Matsushita Laboratory
 
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
Toru Tamaki
 
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
t m
 
Generating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language ModelsGenerating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language Models
harmonylab
 
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援しますキンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
Takayuki Nakayama
 
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさJSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
0207sukipio
 

Recently uploaded (8)

LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
 
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
 
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
 
Generating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language ModelsGenerating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language Models
 
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援しますキンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
 
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさJSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
 

LINQ の概要とかもろもろ

  • 1. 青柳 臣一 @ShinichiAoyagi LINQ の概要とかもろもろ LINQ 勉強会 VSハッカソン倶楽部勉強会 大阪 第2回 2013/6/29(土)
  • 2. • 青柳 臣一(あおやぎ しんいち) @ShinichiAoyagi http://shinichiaoyagi.blogspot.jp/ • 職業 C# やら VB やら WPF やらでソフトウエア開発 最近はスマホとか あと PHP + MySQL で SNS 作ったり 自己紹介
  • 3. • Language-Integrated Query • クエリー機能を言語に統合 • クエリーは SQL とかのクエリー 「問い合わせ」 • Visual Studio 2008(.NET Framework 3.0)で搭載 LINQ
  • 4. • C# や VB で SQL みたいな書き方ができる • let、join、group、orderby など一通りのこ とはできる クエリー式 var array = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; var q = from x in array where x % 2 == 0 select x; Dim array() = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} Dim q = From x In array Where x Mod 2 = 0 Select x
  • 5. • すべてクエリー式を使わない形に変換可 能 クエリー式はシンタックスシュガー var q = array .Where(x => x % 2 == 0) .Select(x => x); Dim q = array. Where(Function(x) x Mod 2 = 0). Select(Function(x) x)
  • 6. • VS 2008 のときの追加機能は LINQ のた め • 暗黙的な型指定(var、Dim) • 拡張メソッド • ラムダ式 • 匿名クラス • オブジェクト初期化子、コレクション初 期化子 すべては LINQ のために (1)
  • 7. すべては LINQ のために (2) var people = new[] { new Person() { Name = “太郎", Age = 14, }, new Person() { Name = “花子", Age = 17, }, }; var q = people .Where(x => x.Age <= 15) .Select(x => new { x.Name }); var コレクション初期化子 オブジェクト初期化子 拡張メソッド ラムダ式 匿名クラス
  • 8. すべては LINQ のために (3) Dim people() = { New Person() With {.Name = “太郎", .Age = 15}, New Person() With {.Name = “花子", .Age = 14} } Dim q = people. Where(Function(x) x.Age <= 15). Select(Function(x) New With {x.Name}) var コレクション初期化子 オブジェクト初期化子 拡張メソッド ラムダ式 匿名クラス
  • 9. • IEnumerable – 配列やコレクションは IEnumerable を実装し ている • だから – System.Linq.Enumerable LINQ to Objects (1) public static IEnumerable<TSource> Where<TSource>( this IEnumerable<TSource> source, Func<TSource, bool> predicate); public static IEnumerable<TSource> Where<TSource>( this IEnumerable<TSource> source, Func<TSource, int, bool> predicate);
  • 10. • System.Linq.Enumerable.Where LINQ to Objects (2) public static IEnumerable<TSource> Where<TSource>( this IEnumerable<TSource> source, Func<TSource, bool> predicate) { foreach (var item in source) { if (predicate(item)) { yield return item; } } }
  • 11. • 要するに for や foreach になります ↑ ちょっと乱暴 LINQ to Objects (3)
  • 12. • XElement 族 LINQ to XML (1) var xml = new XElement("People", new XElement("Person", new XElement(“Name”, “太郎"), new XElement("Age", 15) ), new XElement("Person", new XElement(“Name”, “花子"), new XElement("Age", 14) ) );
  • 13. LINQ to XML (2) var q = xml.Descendants("Person") .Where(x => (int)x.Element("Age") <= 15); var q = xml.Descendants("Person") .Where(x => ((int?)x.Element("Age") ?? int.MaxValue) <= 15); xml.Descendants("Person").Max(x => (int?)x.Element("Age"))
  • 14. • VB は変態すぎてちょっと、、、 LINQ to XML (3) Dim xml = _ <People> <Person> <Name>太郎</Name> <Age>15</Age> </Person> <Person> <Name>花子</Name> <Age>14</Age> </Person> </People>
  • 15. • VB は変態すぎてちょっと、、、 LINQ to XML (4) Dim q = From x In xml...<Person> Where x.<Age>.Value <= 15 Order By x.<Age>.Value Select x.<Name>
  • 16. • 見た目は LINQ to Objects とほぼ同じ LINQ to SQL (1) var db = new DataClasses1DataContext(); var q = from x in db.People where x.Age <= 15 select x.Name; var db = new DataClasses1DataContext(); var q = db.People .Where(x => x.Age <= 15) .Select(x => x.Name);
  • 17. • テーブルとかは IQueryable • だから – System.Linq.Queryable LINQ to SQL (2) public static IQueryable<TSource> Where<TSource>( this IQueryable<TSource> source, Expression<Func<TSource, bool>> predicate); public static IQueryable<TSource> Where<TSource>( this IQueryable<TSource> source, Expression<Func<TSource, int, bool>> predicate);
  • 18. • Expression って? – 型(int や string と同じく一級市民の型) – System.Linq.Expressions.Expression<TDeledate> クラスの こと • 実行コードをデータとして表現したもの • 暗黙の型変換 – ラムダ式は暗黙に Expression 型に変換できる – 1 を 1.0 に暗黙に変換できるように “x => x % 2 == 0” をこのラムダ式の内容を表す Expression 型に変換できる LINQ to SQL (3)
  • 19. • コンパイル時にすること – ラムダ式を Expression 型に変換するコード を作り出す • 実行時(列挙したとき)にすること – Expression 型を元に SQL 文を作ったりして 実行 LINQ to SQL (4)
  • 21. • ぐるぐる回らない LINQ(笑) • 非同期やイベントドリブンなものを LINQ っぽく扱えるようにするもの Reactive Extensions (Rx)