LINQ to なにがし
-
Upload
yuta-matsumura -
Category
Technology
-
view
378 -
download
0
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
ありがとうございました。