SlideShare a Scribd company logo
LINQ to なにがし
2016/04/15 Fukuoka.NET #2
松村優大
2
#fukuten
自己紹介
• 松村 優大(MLBお兄さん)
• 株式会社オルターブース所属
• 島根出身の28歳
• 2015年9月に第一子誕生
3
今日のお話
• LINQについておさらい。
• .NETのLINQ技術をまとめる。
• Entity FrameworkとLINQを組み合わせる時の注意点。
4
LINQ
• 統合言語クエリ (Language INtegrated Query)
• .NET Framework 3.5 で登場
• C#, F#, VB.NET, Delphiが対応
5
構文
• System.Linq 名前空間
• クエリ式
• SQL文に似た構文でデータソースを操作する。
• メソッド式
• メソッドを使ってデータソースを操作する。
• ラムダ式を使う。
6
LINQ to なにがし
種類 対象のデータソース
LINQ to XML XMLデータ
LINQ to Dataset System.Data.Datasetクラス
LINQ to SQL リレーショナルデータベース(RDB)
LINQ to Objects オブジェクトのコレクション
LINQ to Entities Entity Framework
7
LINQ to XML
• https://msdn.microsoft.com/ja-jp/library/bb387098.aspx
• XMLの要素や属性をコレクションとして扱う。
• XMLの読込および作成が可能。
• (あまり需要ない…)
8
LINQ to Dataset
• https://msdn.microsoft.com/ja-jp/library/bb386977%28v=vs.110%29.aspx
• Datasetに格納したデータを操作する。
• リテラル値で列指定するため効率悪い。
• (あまり需要ない…)
9
LINQ to SQL
• https://msdn.microsoft.com/ja-jp/library/bb386976%28v=vs.110%29.aspx
• SQL文をLINQのクエリ式で書ける。
10
var companyNameQuery = from cust in nw.Customers
where cust.City == "London" select cust.CompanyName;
select CompanyName from Customers where City = "London";
LINQ to Objects
• https://msdn.microsoft.com/ja-jp/library/bb397919.aspx
• オブジェクトのコレクションをLINQで操作する。
• foreachで書いていた複雑な処理を簡潔にできる。
• IEnumerable または IEnumerable<T>
11
LINQ to Entities
• https://msdn.microsoft.com/ja-jp/library/bb386964%28v=vs.110%29.aspx
• LINQでEntity Frameworkを実行する。
• O/Rマッパー
• http://blog.shibayan.jp/entry/20101010/1286636999
• SQL(ライク)なクエリに変換されて実行される。
• IQueryable または IQueryable<T>
12
よく使うLINQのメソッド式
• All / Any
• First / FirstOrDefault
• Last / LastOrDefault
• OrderBy / OrderByDescending
• Select
• Single / SingleOrDefault
• Skip
• Take
• Where
13
https://msdn.microsoft.com/ja-jp/library/system.linq.enumerable(v=vs.110).aspx
XxxOrDefault
• 引数で条件を指定。ラムダ式でスッキリ。
• 条件にマッチしなければ null となります。
• XxxOrDefaultメソッドを使うならnullチェック必須。
14
存在チェック
• コレクションに条件に合うデータがあるか。
• ≒条件に合うデータが1件以上あるか。
• Countメソッドは使わず、Anyメソッドを使う。
15
コレクション全体を走査 見つかった時点で終わり
16
Entity Framework
のオハナシ
Entity Framework
• O/Rマッパー
• コードファースト
• モデル → データベース
• 遅延実行
17
IEnumerable と IQueryable
• Entity Frameworkでは「変換されるSQL」をイメージす
ることが大事。
• LINQ to Entitiesのつもりが LINQ to Objects になってし
まうパターンがある。
18
19
簡単なデモ
EFのSQLログを見るには
• Visual Studioの診断ツール
• Visual Studio 2015から利用可能
• DbContext.Database.Logプロパティ
• https://msdn.microsoft.com/ja-jp/library/dn221462%28v=vs.113%29.aspx
20
21
2016/04/14 19:46:44 +09:00
で接続を開きました
SELECT
[GroupBy1].[A1] AS [C1]
FROM ( SELECT
COUNT(1) AS [A1]
FROM [dbo].[roysched] AS [Extent1]
WHERE [Extent1].[title_id] LIKE 'M%'
) AS [GroupBy1]
-- 2016/04/14 19:46:44 +09:00
で実行しています
-- 10 ミリ秒で完了しました。結果: SqlDataReader
ありがとうございました。

More Related Content

PDF
OSC2015 Tokyo/Spring セミナー「初めてのLibreOffice L10N UI/ヘルプ翻訳」予告編
PDF
5つ星の道は遠い
PDF
最近のF#の動向 + α
PDF
[db tech showcase Tokyo 2015] B15:最新PostgreSQLはパフォーマンスが飛躍的に向上する!? - PostgreSQ...
PDF
LINQ in Unity
PDF
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PPTX
20080201
PPTX
LINQ 概要 + 結構便利な LINQ to XML
OSC2015 Tokyo/Spring セミナー「初めてのLibreOffice L10N UI/ヘルプ翻訳」予告編
5つ星の道は遠い
最近のF#の動向 + α
[db tech showcase Tokyo 2015] B15:最新PostgreSQLはパフォーマンスが飛躍的に向上する!? - PostgreSQ...
LINQ in Unity
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
20080201
LINQ 概要 + 結構便利な LINQ to XML

Similar to LINQ to なにがし (20)

PDF
LINQソースでGO!
PDF
Linq To Fun
PDF
非.NETerに向けたLINQの紹介
PPTX
LINQ概要
PPTX
Boost17 cpplinq
PDF
VS勉強会 .NET Framework 入門
PPTX
もう一つのLINQ ~ Queryable入門
PPTX
C# 3.0 以降
PPTX
Entity Framework 5.0 deep dive
PPTX
C#を始めたばかりの人へのLINQ to Objects
PPTX
LINQ の概要とかもろもろ
PDF
The History of LINQ
PPTX
LINQ雑談
PPTX
Linqの速度測ってみた
PDF
Final LINQ Extensions
PPTX
Linqことはじめ
PPTX
20071204
PDF
Let's LINQing! - C#におけるデータ処理 - by @masaru_b_cl #nds51
PPTX
Visual Studio による開発環境・プログラミングの進化
PPTX
C# linq
LINQソースでGO!
Linq To Fun
非.NETerに向けたLINQの紹介
LINQ概要
Boost17 cpplinq
VS勉強会 .NET Framework 入門
もう一つのLINQ ~ Queryable入門
C# 3.0 以降
Entity Framework 5.0 deep dive
C#を始めたばかりの人へのLINQ to Objects
LINQ の概要とかもろもろ
The History of LINQ
LINQ雑談
Linqの速度測ってみた
Final LINQ Extensions
Linqことはじめ
20071204
Let's LINQing! - C#におけるデータ処理 - by @masaru_b_cl #nds51
Visual Studio による開発環境・プログラミングの進化
C# linq
Ad

More from Yuta Matsumura (20)

PDF
「自分のとこでは動くけど…」を無くす devcontainer
PDF
チーム開発で徐々にコード品質をあげていく取り組み
PDF
.NETのサポートポリシーのおさらい #csharptokyo
PDF
App Modernization for .NET
PDF
分かったうえではじめるCI/CD
PDF
VSCodeで始めるAzure Static Web Apps開発
PDF
いつでもどこでも .NET
PDF
.NET アプリを改善して実践する継続的インテグレーション
PDF
マイクロサービス開発が捗る Project Tye
PDF
オンライン中心だから地方のコミュニティも見てみませんか? - Fukuoka.NETの紹介
PDF
Azure の ID 管理サービスに LINE ログインを組み込もう
PDF
Blazor Server テンプレート解説
PDF
The Twelve-Factor (A|M)pp with C#
PDF
改めて C# でできることを振り返る
PDF
スタートアップ企業が実践するクラウドネイティブアプリケーションの開発手法
PDF
忙しい人のための .NET Conf 2019 まとめ
PDF
.NET Conf の歩き方
PDF
PHPカンファレンス福岡2019 閉会式
PDF
PHPカンファレンス福岡2019 開会式
PDF
これから始める Bot Builder 開発のコツと舞台裏
「自分のとこでは動くけど…」を無くす devcontainer
チーム開発で徐々にコード品質をあげていく取り組み
.NETのサポートポリシーのおさらい #csharptokyo
App Modernization for .NET
分かったうえではじめるCI/CD
VSCodeで始めるAzure Static Web Apps開発
いつでもどこでも .NET
.NET アプリを改善して実践する継続的インテグレーション
マイクロサービス開発が捗る Project Tye
オンライン中心だから地方のコミュニティも見てみませんか? - Fukuoka.NETの紹介
Azure の ID 管理サービスに LINE ログインを組み込もう
Blazor Server テンプレート解説
The Twelve-Factor (A|M)pp with C#
改めて C# でできることを振り返る
スタートアップ企業が実践するクラウドネイティブアプリケーションの開発手法
忙しい人のための .NET Conf 2019 まとめ
.NET Conf の歩き方
PHPカンファレンス福岡2019 閉会式
PHPカンファレンス福岡2019 開会式
これから始める Bot Builder 開発のコツと舞台裏
Ad

LINQ to なにがし

Editor's Notes

  • #11: Entity FrameworkのようなO/Rマッパーが普及してからはあまり使われなくなった印象。