LINQ to なにがし

22
LINQ to なななな 2016/04/15 Fukuoka.NET #2 なななな

Transcript of LINQ to なにがし

Page 1: LINQ to なにがし

LINQ to なにがし2016/04/15 Fukuoka.NET #2

松村優大

Page 2: LINQ to なにがし

2

#fukuten

Page 3: LINQ to なにがし

自己紹介

•松村 優大( MLB お兄さん)

•株式会社オルターブース所属

•島根出身の 28 歳

• 2015 年 9 月に第一子誕生

3

Page 4: LINQ to なにがし

今日のお話

• LINQ についておさらい。

• .NET の LINQ 技術をまとめる。

• Entity Framework と LINQ を組み合わせる時の注意点。

4

Page 5: LINQ to なにがし

LINQ

•統合言語クエリ (Language INtegrated Query)• .NET Framework 3.5 で登場

• C#, F#, VB.NET, Delphi が対応

5

Page 6: LINQ to なにがし

構文

• System.Linq 名前空間

•クエリ式• SQL 文に似た構文でデータソースを操作する。

•メソッド式• メソッドを使ってデータソースを操作する。• ラムダ式を使う。

6

Page 7: LINQ to なにがし

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

Page 8: LINQ to なにがし

LINQ to XML

• https://msdn.microsoft.com/ja-jp/library/bb387098.aspx• XML の要素や属性をコレクションとして扱う。

• XML の読込および作成が可能。

• ( あまり需要ない… )

8

Page 9: LINQ to なにがし

LINQ to Dataset

• https://msdn.microsoft.com/ja-jp/library/bb386977%28v=vs.110%29.aspx

•Dataset に格納したデータを操作する。

•リテラル値で列指定するため効率悪い。

• ( あまり需要ない… )

9

Page 10: LINQ to なにがし

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";

Page 11: LINQ to なにがし

LINQ to Objects

• https://msdn.microsoft.com/ja-jp/library/bb397919.aspx•オブジェクトのコレクションを LINQ で操作する。

• foreach で書いていた複雑な処理を簡潔にできる。

• IEnumerable または IEnumerable<T>

11

Page 12: LINQ to なにがし

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

Page 13: LINQ to なにがし

よく使う 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

Page 14: LINQ to なにがし

XxxOrDefault

•引数で条件を指定。ラムダ式でスッキリ。

•条件にマッチしなければ null となります。

• XxxOrDefault メソッドを使うなら null チェック必須。

14

Page 15: LINQ to なにがし

存在チェック

•コレクションに条件に合うデータがあるか。

•≒ 条件に合うデータが1件以上あるか。

• Count メソッドは使わず、 Any メソッドを使う。

15

コレクション全体を走査 見つかった時点で終わり

Page 16: LINQ to なにがし

16

Entity Frameworkのオハナシ

Page 17: LINQ to なにがし

Entity Framework

•O/R マッパー

•コードファースト• モデル → データベース

•遅延実行

17

Page 18: LINQ to なにがし

IEnumerable と IQueryable

• Entity Framework では「変換される SQL 」をイメージすることが大事。

• LINQ to Entities のつもりが LINQ to Objects になってしまうパターンがある。

18

Page 19: LINQ to なにがし

19

簡単なデモ

Page 20: LINQ to なにがし

EF の SQL ログを見るには

• Visual Studio の診断ツール• Visual Studio 2015 から利用可能

•DbContext.Database.Log プロパティ• https://msdn.microsoft.com/ja-jp/library/dn221462%28v=vs.113%29.aspx

20

Page 21: LINQ to なにがし

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

Page 22: LINQ to なにがし

ありがとうございました。