Your SlideShare is downloading. ×
0
20071030
20071030
20071030
20071030
20071030
20071030
20071030
20071030
20071030
20071030
20071030
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

20071030

306

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
306
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. LINQ 最初の一歩Webアプリケーションボード リーダ小野修司(どっとねっとふぁ ん)
  • 2. LINQとは データ(オブジェクト)の集合から簡単な 記述で『必要なオブジェクト』の『必要な メンバ』を『必要とする順序』で取り出せ るようにした強力なシンタックスシュガー • 開発者は抽出条件、抽出するメンバ、抽出順序にのみ 関心を払えばよい • 取り出すデータの型を用意したり、繰り返し文を書い たりする必要はない var query = from x in データの集合 where 抽出条件 orderby 抽出順序のキー項目 select 抽出するメンバ ;
  • 3. 対象となるデータ 配列、LIST<T>(LINQ to Object) • 独自に定義したオブジェクトや組み込みオブジェクト の集合 XMLファイル(LINQ to XML) • XElementオブジェクトのツリー データベース(LINQ to SQL) • DataContext経由で取り出すTableオブジェクト • 当初対応するのはSQL Serverのみ Entity Data Model(LINQ to Entities) • Entity Frameworkによって生成されるオブジェクト • Entity Frameworkは.NET Framework 3.5の最初のリリース には含まれない予定
  • 4. START - Ver3.5using System;using System.Linq;using System.Collections.Generic;using System.IO;namespace VSUGSAMPLE{ class Program { static void Main(string[] args) { DirectoryInfo di = new DirectoryInfo(@"C:UsersonoDesktopLINQVideo"); List<FileInfo> files = new List<FileInfo>(di.GetFiles()); var query = from f in files where f.Length > 10 * 1024 * 1024 && f.Length < 15 * 1024 * 1024 select new { f.Name, f.Length }; foreach (var file in query) Console.WriteLine("{0}:{1}", file.Name, file.Length); } }}
  • 5. デモ1. 拡張メソッドの実装2. クエリ式をラムダ式を利用した拡張メソッ ド呼び出しに変換3. ラムダ式をdelegateに変換4. 匿名型の排除5. オブジェクト初期化子の排除6. 自動的に実装されるプロパティの排除7. 暗黙的に型指定されたローカル変数の排除8. 拡張メソッドの排除9. Ver2.0でコンパイル
  • 6. END – Ver2.0対応using System; private static IEnumerable<TmpFile>using System.Collections.Generic; select(IEnumerable<FileInfo> query)using System.IO; { foreach (FileInfo f in query)namespace VSUGSAMPLE {{ TmpFile t = new TmpFile(); class Program t.Name = f.Name; { t.Length = f.Length; static void Main(string[] args) yield return t; { } DirectoryInfo di = new } DirectoryInfo(@"C:UsersonoDesktopLINQVideo"); } List<FileInfo> files = new List<FileInfo>(di.GetFiles()); public class TmpFile IEnumerable<FileInfo> query2 = files.FindAll(delegate(FileInfo f) { { string name; return f.Length > 10 * 1024 * 1024 && f.Length < 15 * 1024 long length; * 1024; } public string Name ); { get { return name; } IEnumerable<TmpFile> query = select(query2); set { name = value; } } foreach (TmpFile file in query) public long Length { Console.WriteLine("{0}:{1}", file.Name, file.Length); get { return length; } } set { length = value; } } } }
  • 7. IEnumerableとIQueryable IQueryableでは式のツリーを形成 • ラムダ式の式の部分をデータとして保持 • データにアクセスするタイミングで式のツリー を評価 • IEnumerableはプログラムそのものの実行 遅延評価※活用例 LINQ to SQL-最終的に必要なSQL文のみを生成
  • 8. LINQ to XML XMLを意識しないプログラムが可能 XML形式の変換も可能 XElement People = XElement.Parse( @"<People> <Person> <Name>オサダ トシヒロ</Name> <Gender>1</Gender> <Age>32</Age> </Person> </People>"); var query = from p in People.Descendants("Person") where (int)p.Element("Gender") == 1 && (int)p.Element("Age") >= 20 orderby (int)p.Element("Age") select p;
  • 9. LINQ to SQL データベースと連携するクラスはウィザード で生成 生成されるT-SQLはパラメータを使用 追加/更新/削除は自動的にトランザクショ ン化 パーシャルメソッドを使用してビジネスルー ルの追加が可能 LINQTESTDataContext dtc = new LINQTESTDataContext(); var query = from p in dtc.People where p.Gender == 1 && p.Age >= 20 orderby p.Age select p;
  • 10. まとめ LINQはそれがないとプログラムが書けな いというような要素ではない 習得は容易、しかも超強力 利用範囲は拡大していくと考えられる • データ形式毎に対応するIQuaryableプロバイダ が提供されればよい まず触れてその使い勝手を感じてほしい
  • 11. 参考情報 ビデオ • Decomposing LINQ • http://www.microsoft.com/uk/msdn/nuggets/nugget/227/Decomposing-LINQ.aspx • MSDN Nuggets • http://www.microsoft.com/uk/msdn/nuggets/ • C# 3.0:8本 LINQ to SQL:18本 LINQ to XML:3本 LINQ to Entities:5本 等 Blog • Mike Taultys Blog : LINQ? Single Step this code... • http://mtaulty.com/CommunityServer/blogs/mike_taultys_blog/archive/2007/10/03/9842.aspx • LINQ: Building an Iqueryable Provider - Part I to VII • http://blogs.msdn.com/mattwar/archive/2007/07/30/linq-building-an-iqueryable-provider-part- i.aspx 資料 • C#3.0の概要 • http://www.microsoft.com/japan/msdn/net/bb308966.aspx • LINQ:.NET統合言語クエリ • http://www.microsoft.com/japan/msdn/net/bb308959.aspx • .NET標準クエリ演算子 • http://www.microsoft.com/japan/msdn/net/bb394939.aspx • LINQ to SQL:リレーショナルデータのための.NET統合言語クエリ • http://www.microsoft.com/japan/msdn/net/bb425822.aspx • XMLデータ用の.NET統合言語クエリ • http://www.microsoft.com/japan/msdn/net/bb308960.aspx

×