SlideShare a Scribd company logo
C# LINQ ~深く知って、使いまくろう~
•
• http://goo.gl/WXRg0l
•
• http://goo.gl/XRf4kl
2
ソースコード
参照
•
•
1.
2.
3.
4.
5.
C# LINQ ~深く知って、使いまくろう~
•
•
•
•
•
•
•
•
•
var answer = 0;
for (int number = 1; number <= 10; number++)
answer += number;
•
var answer = Enumerable.Range(1, 10).Sum();
•
•
•
•
•
•
•
void Clock(Action onTick)
{
onTick();
Observable.Interval(TimeSpan.FromSeconds(1))
.ObserveOn(SynchronizationContext.Current)
.Subscribe(_ => onTick());
}
ソースコード
参照
•
var drag = this.MouseDownAsObservable()
.SelectMany(_ => this.MouseMoveAsObservable())
.TakeUntil(this.MouseUpAsObservable());
ソースコード
参照
C# LINQ ~深く知って、使いまくろう~
•
IEnumerable<int> sequence1 = new[] { 1, 1, 2, 3, 5, 8, 13, 21, 34 };
IEnumerable<int> sequence2 = sequence1.Where (x => x % 2 == 0);
IEnumerable<int> sequence3 = sequence2.Select (x => x * x );
foreach (int item in sequence3)
Console.WriteLine(item);
ソースコード
参照
IEnuramerable<T>
Where<T>
Select<T, U>
IEnuramerable<U>
T型の要素のシーケンス
絞込み
各要素をT型からU型に変換
U型の要素のシーケンス
C# LINQ ~深く知って、使いまくろう~
•
// 普通自動車運転免許を持ってる可能性のある人に電話をかける
public static void CallEligibleDrivers(IEnumerable<Person> people)
{
foreach (var person in people) {
if (person.Age >= 18)
Call(person);
}
}
ソースコード
参照
C# LINQ ~深く知って、使いまくろう~
IEnumerable<int> sequence1 = new[] { 1, 1, 2, 3, 5, 8, 13, 21, 34 };
IEnumerable<int> sequence2 = sequence1.Where (x => x % 2 == 0);
IEnumerable<int> sequence3 = sequence2.Select (x => x * x );
foreach (int item in sequence3)
Console.WriteLine(item);
IEnumerable<T>
Where<T>
Select<T, U>
IEnumerable<U>
T型の要素のシーケンス
絞込み
各要素をT型からU型に変換
U型の要素のシーケンス
IEnumerable<T>
Where<T>
Select<T, U>
IEnumerable<U>
IEnumerator が要素にアク
セス
IEnumerator が要素にアク
セス
要素を取り出そうとする度
IEnumerator が要素にアク
セス
•
var data = new[] { -1, 6, 7, 3, -2, 0, 5, 2, 7 };
var result = data.Where(number => number > 0)
.Select(number => string.Format("{0} mm", number / 1000.0));
foreach (var text in result)
Console.WriteLine(text);
ソースコード
参照
実際に sequence3 から値が取り出さ
れるまで、sequence1 から値は取り
出されず、Where や Select に渡した
デリゲートも実行されない
IEnumerable<T>
Where<T>
Select<T, U>
IEnumerable<U>
式木を調べて
(SQL などを動的に生成し)
要素を取り出す
要素を取り出そうとする
式木
•
Debug.WriteLine("■ LINQ の実際の処理の流れ(LINQ to Entities) ■");
var data = new EmployeeModel();
data.Database.Log = message => Console.WriteLine(message);
var sequence1 = data.Employees;
var sequence2 = sequence1.Where(employee => employee.Name.Contains("川"));
var sequence3 = sequence2.Select(
employee => new { 番号 = employee.Number, 名前 = employee.Name });
Console.WriteLine("■ 出力開始 ■");
foreach (var employee in sequence3)
Console.WriteLine("{0}: {1}", employee.番号, employee.名前);
Console.WriteLine("■ 出力終了 ■");
ソースコード
参照
実際に sequence3 から値が取り出される
ときに式木から SQL を生成して発行
C# LINQ ~深く知って、使いまくろう~
•
• http://msdn.microsoft.com/ja-jp/library/system.linq.iqueryable(v=vs.110).aspx
public interface IQueryable : IEnumerable
{
Type ElementType { get; }
Expression Expression { get; }
IQueryProvider Provider { get; }
}
public interface IQueryable<T> : IEnumerable<T>, IQueryable
{}
•
class Foo : IQueryable
{
public Type ElementType
{ get { throw new NotImplementedException(); } }
public Expression Expression
{ get { throw new NotImplementedException(); } }
public IQueryProvider Provider
{ get { throw new NotImplementedException(); } }
public IEnumerator GetEnumerator()
{ throw new NotImplementedException(); }
}
ソースコード
参照
•
•
•
•
•
•
var data = new EmployeeModel();
data.Database.Log = message => Debug.Write(message);
var sequence1 = data.Employees;
var sequence2 = sequence1.Where (employee => employee.Name.Contains("川"));
var sequence3 = sequence2.Select (
employee => new { 番号 = employee.Number, 名前 = employee.Name });
Debug.WriteLine("■ ラムダ式サンプル: 出力開始 ■");
foreach (var employee in sequence3)
Console.WriteLine("{0}: {1}", employee.番号, employee.名前);
Debug.WriteLine("■ ラムダ式サンプル: 出力終了 ■");
ソースコード
参照
•
SELECT
[Extent1].[Number] AS [Number],
[Extent1].[Name] AS [Name]
FROM [dbo].[Employee] AS [Extent1]
WHERE [Extent1].[Name] LIKE N'%川%'
SELECT
[Extent1].[Number] AS [Number],
[Extent1].[Name] AS [Name],
[Extent1].[DepartmentID] AS [DepartmentID],
[Extent1].[EmailAddress] AS [EmailAddress]
FROM [dbo].[Employee] AS [Extent1]
•
•
public static class Queryable
{
public static IQueryable<T> Where<T>(this IQueryable<T> source,
Expression<Func<T, bool>> predicate);
}
public static class Enumerable
{
public static IEnumerable<T> Where<T>(this IEnumerable<T> source,
Func<T, int, bool> predicate);
}
•
•
•
•
•
class Program
{
static void Main()
{
Func<int, int, int> sequence1 = (x, y) => x + y;
Func<int, int, int> sequence2 = (x, y) => { return x + y; };
Expression<Func<int, int, int>> expression1 = (x, y) => x + y;
//Expression<Func<int, int, int>> expression2 = (x, y) =>
{ return x + y; };
}
}
ブロックが含まれるラムダ式は式として扱えない
(IQueryable<T> には使えない)
ソースコード
参照
•
•
var sequence4 = from employee in data.Employee
where employee.Name.Contains("田")
select new { 番号 = employee.Id,
名前 = employee.Name };
•
•
•
•
•
•
C# LINQ ~深く知って、使いまくろう~
•
ソースコード
参照
// メソッド構文
var fizzBuzzs = Enumerable.Range(1, 50).Select(FizzBuzz);
// クエリー構文
var fizzBuzzs = from number in Enumerable.Range(1, 50)
select FizzBuzz(number);
•
ソースコード
参照
// メソッド構文
var numbers = Enumerable.Range(1, 9)
.SelectMany(x => Enumerable.Range(1, 9),
(x, y) => string.Format("{0}x{1}={2}", x, y, x * y));
// クエリー構文
var numbers = from x in Enumerable.Range(1, 9)
from y in Enumerable.Range(1, 9)
select string.Format("{0}x{1}={2}", x, y, x * y);
•
ソースコード
参照
// メソッド構文
var numbers = new[] { 2, 6, 1, 3, -7, 1, -6, 0, -3 }
.Where(number => number % 2 == 0);
// クエリー構文
var numbers = from number in new[] { 2, 6, 1, 3, -7, 1, -6, 0, -3 }
where number % 2 == 0
select number;
•
ソースコード
参照
// メソッド構文
var orderedPeople = people.OrderByDescending(person => person.Age)
.ThenBy(person => person.Name);
// クエリー構文
var orderedPeople = from person in people
orderby person.Age descending, person.Name
select person;
•
ソースコード
参照
// メソッド構文
var collection = Enumerable.Range(1, 10)
.Select(x => x * x)
.Where(x => x > 50);
// クエリー構文
var collection = from n in Enumerable.Range(1, 10)
select n * n into m
where m > 50
select m;
•
ソースコード
参照
// メソッド構文
var collection = books.GroupBy(book => book.Genre);
// クエリー構文
var collection = from book in books
group book by book.Genre;
•
• https://msdn.microsoft.com/ja-jp/library/bb546133.aspx
•
ソースコード
参照
// メソッド構文
var collection = bookGenres.Join(books,
bookGenre => bookGenre.Genre,
book => book.Genre,
(bookGenre, book) =>
new { Genre = bookGenre.Name, Title = book.Title });
// クエリー構文
var collection = from bookGenre in bookGenres
join book in books on bookGenre.Genre equals book.Genre
select new { Genre = bookGenre.Name, Title = book.Title };
•
ソースコード
参照
var numbers1 = new int[] { 10, 20, 30, 40, 50 };
var numbers2 = new int[] { 1, 2, 3 };
// メソッド構文
var collection = numbers1.Zip(
numbers2,
(number1, number2) => number1 + number2
);
•
ソースコード
参照
// メソッド構文
var numbers = Enumerable.Range(1, 5);
var result = numbers.Aggregate(
1, (sum, number) => sum * number);
•
ソースコード
参照
var min = numbers.Min();
var max = numbers.Max();
var sum = numbers.Sum();
var average = numbers.Average();
•
ソースコード
参照
•
C# LINQ ~深く知って、使いまくろう~
•
static string 数字だけの文字列に変換(string text)
{
var stringBuilder = new StringBuilder();
foreach (var character in text) {
if (Char.IsDigit(character))
stringBuilder.Append(character);
}
return stringBuilder.ToString();
}
static void Main()
{
var text = "3458y139h+(vq9eras^(&da23-8941asdf; asdf';";
Console.WriteLine(数字だけの文字列に変換(text));
}
ソースコード
参照
• 問題 : Question.cs
• 答えの例: Answer.cs
•
ソースコード
参照
•
•
•
•
•
•
• 問題 : Question.cs
• 答えの例: Answer.cs
•

More Related Content

PDF
LINQソースでGO!
PPTX
C#を始めたばかりの人へのLINQ to Objects
PPTX
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
PDF
C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020
PPTX
メタプログラミング C#
PPTX
LINQ 概要 + 結構便利な LINQ to XML
KEY
Clojure programming-chapter-2
KEY
Objc lambda
LINQソースでGO!
C#を始めたばかりの人へのLINQ to Objects
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020
メタプログラミング C#
LINQ 概要 + 結構便利な LINQ to XML
Clojure programming-chapter-2
Objc lambda

What's hot (20)

PDF
Javaセキュアコーディングセミナー東京第1回演習の解説
PPTX
C#6.0の新機能紹介
PDF
PHP5.5新機能「ジェネレータ」初心者入門
PPT
Algorithm 速いアルゴリズムを書くための基礎
PPTX
PDF
JavaのGenericsとは?
PDF
Javaセキュアコーディングセミナー東京第3回演習の解説
PDF
Javaセキュアコーディングセミナー東京第3回講義
PDF
C++0x 言語の未来を語る
PDF
Java SE 7 InvokeDynamic in JRuby
PDF
Scala の関数型プログラミングを支える技術
PPT
ジェネリクスの基礎と クラス設計への応用
PDF
traitを使って楽したい話
PDF
講座Java入門
PPTX
Java Puzzlers JJUG CCC 2016
PDF
Pythonで始めるDropboxAPI
PDF
Javaセキュアコーディングセミナー東京第1回 演習
PDF
Java SE 8 lambdaで変わる プログラミングスタイル
PDF
Bluespec @waseda(PDF)
PDF
Java puzzlers 2013 at JavaFesta Japan
Javaセキュアコーディングセミナー東京第1回演習の解説
C#6.0の新機能紹介
PHP5.5新機能「ジェネレータ」初心者入門
Algorithm 速いアルゴリズムを書くための基礎
JavaのGenericsとは?
Javaセキュアコーディングセミナー東京第3回演習の解説
Javaセキュアコーディングセミナー東京第3回講義
C++0x 言語の未来を語る
Java SE 7 InvokeDynamic in JRuby
Scala の関数型プログラミングを支える技術
ジェネリクスの基礎と クラス設計への応用
traitを使って楽したい話
講座Java入門
Java Puzzlers JJUG CCC 2016
Pythonで始めるDropboxAPI
Javaセキュアコーディングセミナー東京第1回 演習
Java SE 8 lambdaで変わる プログラミングスタイル
Bluespec @waseda(PDF)
Java puzzlers 2013 at JavaFesta Japan
Ad

Viewers also liked (20)

PPTX
もう一つのLINQ ~ Queryable入門
PPTX
C# LINQ入門
PPTX
C sharp6
PPTX
C#4.0 と Visual Studio 2010/.NET Framework 4.0~ここが Cool! いけてる機能10連発!~
PDF
はてブ砲をくらったときのお話
PDF
「LINQ」っていう名前だけでも 覚えて帰ってください!
PDF
究極にして至高のWAF
PDF
優しいWAFの作り方
PPTX
C#の書き方
PDF
2014-10-27 #ssmjp 腹を割って話そう (運用xセキュリティ)
PDF
はじめてのWi-Fiクラック
PDF
Modern C# Programming 現代的なC#の書き方、ライブラリの選び方
PPTX
インターネッツの繋がるしくみ(物理層編) #sa_study
PDF
WordPressプラグイン開発の めんどうな作業は執事(Jenkins)にお任せ
PDF
〜 デザイン脳×プログラミング脳 〜 デザイナーとプログラマーの72時間戦争
PDF
ノリとその場の勢いでPocを作った話
PDF
WordPress の .htaccess って何者?
PDF
とある診断員とAWS
PDF
フリーでやろうぜ!セキュリティチェック!
PDF
An Internal of LINQ to Objects
もう一つのLINQ ~ Queryable入門
C# LINQ入門
C sharp6
C#4.0 と Visual Studio 2010/.NET Framework 4.0~ここが Cool! いけてる機能10連発!~
はてブ砲をくらったときのお話
「LINQ」っていう名前だけでも 覚えて帰ってください!
究極にして至高のWAF
優しいWAFの作り方
C#の書き方
2014-10-27 #ssmjp 腹を割って話そう (運用xセキュリティ)
はじめてのWi-Fiクラック
Modern C# Programming 現代的なC#の書き方、ライブラリの選び方
インターネッツの繋がるしくみ(物理層編) #sa_study
WordPressプラグイン開発の めんどうな作業は執事(Jenkins)にお任せ
〜 デザイン脳×プログラミング脳 〜 デザイナーとプログラマーの72時間戦争
ノリとその場の勢いでPocを作った話
WordPress の .htaccess って何者?
とある診断員とAWS
フリーでやろうぜ!セキュリティチェック!
An Internal of LINQ to Objects
Ad

Similar to C# LINQ ~深く知って、使いまくろう~ (20)

PDF
[東京] JapanSharePointGroup 勉強会 #2
PDF
わかるコードを書くために For writing clean code
PDF
知って得するC#
PDF
Pgunconf 20121212-postgeres fdw
PDF
Javaセキュアコーディングセミナー東京第4回講義
PDF
JavaScript 講習会 #1
PDF
CodeIgniter入門
PDF
Introduction to Spock
PDF
10分で分かるr言語入門ver2.10 14 1101
PPTX
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
KEY
軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題
PPTX
LINQ の概要とかもろもろ
PDF
named_scope more detail - WebCareer
PPTX
Infer.netによるldaの実装
PDF
⑲jQueryをおぼえよう!その5
PDF
JavaScript入門
PDF
10分で分かるr言語入門ver2.9 14 0920
PDF
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
PDF
PDF
中3女子が狂える本当に気持ちのいい constexpr
[東京] JapanSharePointGroup 勉強会 #2
わかるコードを書くために For writing clean code
知って得するC#
Pgunconf 20121212-postgeres fdw
Javaセキュアコーディングセミナー東京第4回講義
JavaScript 講習会 #1
CodeIgniter入門
Introduction to Spock
10分で分かるr言語入門ver2.10 14 1101
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題
LINQ の概要とかもろもろ
named_scope more detail - WebCareer
Infer.netによるldaの実装
⑲jQueryをおぼえよう!その5
JavaScript入門
10分で分かるr言語入門ver2.9 14 0920
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
中3女子が狂える本当に気持ちのいい constexpr

More from Fujio Kojima (20)

PDF
AIエージェント勉強会~マイクロソフトの最新技術発表を受けて~ (2025/07)
PDF
ITエンジニア (Developer) 向けAIエージェント勉強会 (2025/06/13)
PDF
Burikaigi 2023「C# Live Coding!」 小島の分
PDF
2022.04.23 .NET 6 -7 時代のデスクトップ アプリケーション開発
PDF
.NET 6 時代のデスクトップ アプリケーション開発
PDF
BuriKaigi 2022 「C# Live Coding!」 小島の分
PDF
C#勉強会 ~ C#9の新機能 ~
PDF
.NET 5 勉強会 ~.NET Framework から .NET へ~
PDF
.NETラボ 勉強会 2021年1月 「C#で機械学習」
PDF
『議論パターン』 (Discussion Patterns) ~不毛な議論を避け、実り有る議論とするために~
PDF
C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~
PDF
牛タン会議 2019 @ 仙台 「C# ドキドキ ライブ!!」 小島の分
PDF
『機械学習 (AI/ML) の基礎と Microsoft の AI | 2019/04/02 Global AI Nights Fukui
PDF
機械学習 (AI/ML) 勉強会 #2 IoT編
PDF
機械学習 (AI/ML) 勉強会 #1 基本編
PPTX
BuriKaigi2019 「C# ドキドキ・ライブコーディング」 小島の分
PPTX
機械学習入門
PPTX
C# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しよう
PPTX
「ふくいソフトウェアコンペティション 2014 大賞受賞者プレゼンテーション」
PPTX
.NET MVP によるドキドキ・ライブコーディング! 小島の分
AIエージェント勉強会~マイクロソフトの最新技術発表を受けて~ (2025/07)
ITエンジニア (Developer) 向けAIエージェント勉強会 (2025/06/13)
Burikaigi 2023「C# Live Coding!」 小島の分
2022.04.23 .NET 6 -7 時代のデスクトップ アプリケーション開発
.NET 6 時代のデスクトップ アプリケーション開発
BuriKaigi 2022 「C# Live Coding!」 小島の分
C#勉強会 ~ C#9の新機能 ~
.NET 5 勉強会 ~.NET Framework から .NET へ~
.NETラボ 勉強会 2021年1月 「C#で機械学習」
『議論パターン』 (Discussion Patterns) ~不毛な議論を避け、実り有る議論とするために~
C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~
牛タン会議 2019 @ 仙台 「C# ドキドキ ライブ!!」 小島の分
『機械学習 (AI/ML) の基礎と Microsoft の AI | 2019/04/02 Global AI Nights Fukui
機械学習 (AI/ML) 勉強会 #2 IoT編
機械学習 (AI/ML) 勉強会 #1 基本編
BuriKaigi2019 「C# ドキドキ・ライブコーディング」 小島の分
機械学習入門
C# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しよう
「ふくいソフトウェアコンペティション 2014 大賞受賞者プレゼンテーション」
.NET MVP によるドキドキ・ライブコーディング! 小島の分

C# LINQ ~深く知って、使いまくろう~