LINQ to なにがし

Post on 09-Feb-2017

378 views 0 download

Transcript of LINQ to なにがし

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

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