SlideShare a Scribd company logo
LINQ 概要
+
結構便利な LINQ to XML
青柳 臣一

@ShinichiAoyagi

第3回 LINQ 勉強会

2013/12/14(土)
自己紹介
• 青柳 臣一(あおやぎ しんいち)
@ShinichiAoyagi
http://shinichiaoyagi.blogspot.jp/

• 職業 ソフトウエア開発
C#、VB、WPF、Windows Forms
C、C++
HTML5、JavaScript
PHP、MySQL
Windows、Linux、iOS、Android
LINQ (1)
• Language-Integrated Query
• クエリー機能を言語に統合

• クエリーは SQL とかのクエリー
「問い合わせ」

• Visual Studio 2008(.NET Framework
3.0)で搭載
LINQ (2)
• コレクションの検索
– 配列や List<T> など

LINQ to Objects

• データベースの検索
– DataContext
LINQ to SQL
クエリー式 (1)
• C# や VB で SQL みたいな書き方ができ
る
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
クエリー式 (2)
• let、join、group、orderby など一通り
のことはできる
– 標準クエリ演算子の概要
http://msdn.microsoft.com/ja-jp/library/vstudio/bb397896.aspx

– VB には Aggregate があるが C# には無い
(C# では書けない)
クエリー式 (3)
• VB の Skip、Take
Dim q = From x In array
Skip 3
Take 2
Select x

• VB の Aggregate
Dim total = Aggregate x In array
Where x Mod 2 = 0
Into Sum(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)
LINQ のための言語サポート (1)
• VS 2008 のときの追加機能は LINQ のた
め
• 暗黙的な型指定(var、Dim)
• 拡張メソッド
• ラムダ式
• 匿名クラス
• オブジェクト初期化子、コレクション初
期化子
LINQ のための言語サポート(2)
コレクション初期化子
var

オブジェクト初期化子
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 });
匿名クラス

拡張メソッド
ラムダ式
LINQ のための言語サポート(3)
コレクション初期化子
var

オブジェクト初期化子
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})
匿名クラス

拡張メソッド
ラムダ式
LINQ to Objects (1)
• IEnumerable
– 配列やコレクションは IEnumerable を実装し
ている

• だから
– System.Linq.Enumerable
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);
LINQ to Objects (2)
• 最終的には for や foreach と同等
LINQ to SQL (1)
• 見た目は LINQ to Objects とほぼ同じ
var db = new NorthwindDataContext();
var q = from c in db.Customers
where c.Country == “USA”
select c.ContactName;
var db = new NorthwindDataContext();
var q = db.Customers
.Where(c => c.Country == “USA”)
.Select(c => c.ContactName);
LINQ to SQL (2)
• テーブルとかは IQueryable
• だから
– System.Linq.Queryable
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);
LINQ to SQL (3)
• コンパイル時にすること
– ラムダ式を Expression 型に変換するコード
を作り出す

• 実行時(列挙したとき)にすること
– Expression 型を元に SQL 文を作ったりして
実行
LINQ to XML (1)
• もう一つの XML API
– W3C の XmlDocument とかとは別

• XDocument、XElement、XAttribute
– System.Xml.Linq 名前空間
XDocument 属の便利なところ (1)
• コンストラクタが便利
var xml = new XDocument(
new XElement("AddressBook",
new XElement("Person", new XAttribute("Id", 100),
new XElement("Name", "太郎"),
new XElement("Age", 20)),
new XElement("Person", new XAttribute("Id", 101),
new XElement("Name", "花子"),
new XElement("Age", 25))

)
);
XDocument 属の便利なところ (2)
• LINQ で使えるのが便利
var q = from x in xml.Elements("AddressBook")
.Elements("Person")
where x.Attribute("Id").Value == "100"
select x;

var q = xml.Elements("AddressBook")
.Elements("Person")
.Where(x => x.Attribute("Id").Value == "100");
XDocument 属の便利なところ (3)
• 明示的な型変換が便利
var n = xml.Elements("AddressBook")
.Elements("Person")
.Max(x => (int)x.Element("Age"));

• Nullable への明示的な型変換が便利
var n = xml.Elements("AddressBook")
.Elements("Person")
.Max(x => (int?)x.Element("Age") ?? -1);
XDocument 属の便利なところ (4)
• XPath も使える
– System.Xml.XPath 名前空間
var n =
xml.XPathSelectElements("/AddressBook/Person")
.Max(x => (int?)x.Element("Age") ?? -1);

• 注意
– 明示的な型変換に失敗すると例外
Reactive Extensions (Rx)
• 非同期やイベントドリブンなものを
LINQ っぽく扱えるようにするもの
– GPS の位置情報がやってくるのを処理すると
か
– Leap Motion からやってくるデータを処理す
るとか

More Related Content

PPTX
C# LINQ ~深く知って、使いまくろう~
PDF
LINQソースでGO!
PPTX
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
PPTX
C#を始めたばかりの人へのLINQ to Objects
PPTX
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
KEY
Objc lambda
PDF
これからのJavaScriptー関数型プログラミングとECMAScript6
PDF
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
C# LINQ ~深く知って、使いまくろう~
LINQソースでGO!
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C#を始めたばかりの人へのLINQ to Objects
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
Objc lambda
これからのJavaScriptー関数型プログラミングとECMAScript6
Java8 コーディングベストプラクティス and NetBeansのメモリログから...

What's hot (20)

PDF
C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020
PPT
Algorithm 速いアルゴリズムを書くための基礎
PDF
JavaScript 講習会 #1
PDF
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
PDF
講座Java入門
PDF
ECMAScript6による関数型プログラミング
PDF
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
PPTX
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」
PDF
Javaセキュアコーディングセミナー東京第3回講義
PPTX
メタプログラミング C#
PDF
Unityで覚えるC#
PDF
ScalaMatsuri 2016
PDF
Frege, What a Non-strict Language
PDF
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
PPTX
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
PDF
C++ マルチスレッドプログラミング
PDF
Effective Modern C++ 読書会 Item 35
PDF
はてなブックマーク in Scala
PPTX
非同期処理の基礎
PDF
LINQ in Unity
C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020
Algorithm 速いアルゴリズムを書くための基礎
JavaScript 講習会 #1
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
講座Java入門
ECMAScript6による関数型プログラミング
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」
Javaセキュアコーディングセミナー東京第3回講義
メタプログラミング C#
Unityで覚えるC#
ScalaMatsuri 2016
Frege, What a Non-strict Language
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
C++ マルチスレッドプログラミング
Effective Modern C++ 読書会 Item 35
はてなブックマーク in Scala
非同期処理の基礎
LINQ in Unity
Ad

Similar to LINQ 概要 + 結構便利な LINQ to XML (20)

PPTX
LINQ概要
PPTX
LINQ の概要とかもろもろ
PPTX
20080201
PPTX
20071204
PPTX
Visual Studio 2008による 開発環境・プログラミングの進化
PDF
10分で分かるr言語入門ver2.14 15 0905
PDF
linq.js - Linq to Objects for JavaScript
PDF
10分で分かるr言語入門ver2.15 15 1010
PDF
2019年度若手技術者向け講座 インデックス
PPTX
C# 3.0 以降
PDF
MlnagoyaRx
PDF
VS勉強会 .NET Framework 入門
PDF
Search on AWS - IVS CTO Night and Day 2016 Spring
PPTX
Rx class
PDF
MlnagoyaRx02
PDF
CodeIgniter入門
PPTX
Entity Framework 5.0 deep dive
PPTX
つぶLT20121215
PPTX
The seminar of asp.net at 201908 sakurug
PDF
#TokyoR 39 高速に前処理するNYSOL
LINQ概要
LINQ の概要とかもろもろ
20080201
20071204
Visual Studio 2008による 開発環境・プログラミングの進化
10分で分かるr言語入門ver2.14 15 0905
linq.js - Linq to Objects for JavaScript
10分で分かるr言語入門ver2.15 15 1010
2019年度若手技術者向け講座 インデックス
C# 3.0 以降
MlnagoyaRx
VS勉強会 .NET Framework 入門
Search on AWS - IVS CTO Night and Day 2016 Spring
Rx class
MlnagoyaRx02
CodeIgniter入門
Entity Framework 5.0 deep dive
つぶLT20121215
The seminar of asp.net at 201908 sakurug
#TokyoR 39 高速に前処理するNYSOL
Ad

More from ShinichiAoyagi (13)

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

LINQ 概要 + 結構便利な LINQ to XML

  • 1. LINQ 概要 + 結構便利な LINQ to XML 青柳 臣一 @ShinichiAoyagi 第3回 LINQ 勉強会 2013/12/14(土)
  • 2. 自己紹介 • 青柳 臣一(あおやぎ しんいち) @ShinichiAoyagi http://shinichiaoyagi.blogspot.jp/ • 職業 ソフトウエア開発 C#、VB、WPF、Windows Forms C、C++ HTML5、JavaScript PHP、MySQL Windows、Linux、iOS、Android
  • 3. LINQ (1) • Language-Integrated Query • クエリー機能を言語に統合 • クエリーは SQL とかのクエリー 「問い合わせ」 • Visual Studio 2008(.NET Framework 3.0)で搭載
  • 4. LINQ (2) • コレクションの検索 – 配列や List<T> など LINQ to Objects • データベースの検索 – DataContext LINQ to SQL
  • 5. クエリー式 (1) • C# や VB で SQL みたいな書き方ができ る 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
  • 6. クエリー式 (2) • let、join、group、orderby など一通り のことはできる – 標準クエリ演算子の概要 http://msdn.microsoft.com/ja-jp/library/vstudio/bb397896.aspx – VB には Aggregate があるが C# には無い (C# では書けない)
  • 7. クエリー式 (3) • VB の Skip、Take Dim q = From x In array Skip 3 Take 2 Select x • VB の Aggregate Dim total = Aggregate x In array Where x Mod 2 = 0 Into Sum(x)
  • 8. クエリー式はシンタックスシュガー • すべてクエリー式を使わない形に変換可 能 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)
  • 9. LINQ のための言語サポート (1) • VS 2008 のときの追加機能は LINQ のた め • 暗黙的な型指定(var、Dim) • 拡張メソッド • ラムダ式 • 匿名クラス • オブジェクト初期化子、コレクション初 期化子
  • 10. LINQ のための言語サポート(2) コレクション初期化子 var オブジェクト初期化子 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 }); 匿名クラス 拡張メソッド ラムダ式
  • 11. LINQ のための言語サポート(3) コレクション初期化子 var オブジェクト初期化子 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}) 匿名クラス 拡張メソッド ラムダ式
  • 12. LINQ to Objects (1) • IEnumerable – 配列やコレクションは IEnumerable を実装し ている • だから – System.Linq.Enumerable 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);
  • 13. LINQ to Objects (2) • 最終的には for や foreach と同等
  • 14. LINQ to SQL (1) • 見た目は LINQ to Objects とほぼ同じ var db = new NorthwindDataContext(); var q = from c in db.Customers where c.Country == “USA” select c.ContactName; var db = new NorthwindDataContext(); var q = db.Customers .Where(c => c.Country == “USA”) .Select(c => c.ContactName);
  • 15. LINQ to SQL (2) • テーブルとかは IQueryable • だから – System.Linq.Queryable 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);
  • 16. LINQ to SQL (3) • コンパイル時にすること – ラムダ式を Expression 型に変換するコード を作り出す • 実行時(列挙したとき)にすること – Expression 型を元に SQL 文を作ったりして 実行
  • 17. LINQ to XML (1) • もう一つの XML API – W3C の XmlDocument とかとは別 • XDocument、XElement、XAttribute – System.Xml.Linq 名前空間
  • 18. XDocument 属の便利なところ (1) • コンストラクタが便利 var xml = new XDocument( new XElement("AddressBook", new XElement("Person", new XAttribute("Id", 100), new XElement("Name", "太郎"), new XElement("Age", 20)), new XElement("Person", new XAttribute("Id", 101), new XElement("Name", "花子"), new XElement("Age", 25)) ) );
  • 19. XDocument 属の便利なところ (2) • LINQ で使えるのが便利 var q = from x in xml.Elements("AddressBook") .Elements("Person") where x.Attribute("Id").Value == "100" select x; var q = xml.Elements("AddressBook") .Elements("Person") .Where(x => x.Attribute("Id").Value == "100");
  • 20. XDocument 属の便利なところ (3) • 明示的な型変換が便利 var n = xml.Elements("AddressBook") .Elements("Person") .Max(x => (int)x.Element("Age")); • Nullable への明示的な型変換が便利 var n = xml.Elements("AddressBook") .Elements("Person") .Max(x => (int?)x.Element("Age") ?? -1);
  • 21. XDocument 属の便利なところ (4) • XPath も使える – System.Xml.XPath 名前空間 var n = xml.XPathSelectElements("/AddressBook/Person") .Max(x => (int?)x.Element("Age") ?? -1); • 注意 – 明示的な型変換に失敗すると例外
  • 22. Reactive Extensions (Rx) • 非同期やイベントドリブンなものを LINQ っぽく扱えるようにするもの – GPS の位置情報がやってくるのを処理すると か – Leap Motion からやってくるデータを処理す るとか