Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Hokuriku.NETC# LINQ入門        2011/06/11            小島 富治雄         福井コンピュータ株式会社
Agenda1. はじめに2. C# のこれから3. C#1.0 までで   押さえておくこと4. C#2.0 と 3.0 の新機能5. Linq
1. はじめに
福井情報技術者協会• http://fitea.org• 福井のIT産業に関わる技術者の「横のつなが  り」を支援するコミュニティ FITEAのミッション  – 『私たちは、福井をソフトウェア大国にするべく積    極的に活動を行い、福井の情...
自己紹介• 小島 富治雄• 福井コンピュータ株式会社• Microsoft MVP for Development Tools - Visual   C#                        英会話            ジャグリング...
自己紹介タイム• 名前• 所属や出身など• C#で好きなところ
2. C# のこれから
Anders Hejlsberg
Anders Hejlsberg 談:   C#の今後について    2006/02/02 at 横浜Q. 今後C#は、関数型言語として進化してい  くのか?A. Yes. C#3.0 や LINQ で導入された「ラム  ダ式」などの機能は、H...
Anders Hejlsberg 談:    C#の今後についてQ. AOP (アスペクト指向プログラミング) 機  能 (=オブジェクトに対して後付けで機能  を挿入する仕組み) を提供する予定は?A. AOP は、個人的には懐疑的。AOP ...
3. C#1.0までで押さえておくこと
C#1.0までで     押さえておくところ• .NET らしい Cool な書き方 –delegate と event –データバインド – 属性 (アノテーション)
例• Demo  –委譲による分割    →MVC構造など  –データバインド    • 双方向依存      → interface、delegate、event に      よるデータバインド
データバインド                                                                        <<interface>>                              ...
DrawingUI                  DataSource        + OnChanged() : void                    IDataSource<T>     - drawingUI       ...
例• Demo  –C#2.0、3.0 による進化  –オブジェクトへの委譲 → メソッ   ドへの委譲    • class → delegate → 匿名メソッド      (クロージャ) → ラムダ式    • yield による継続
3. C#2.0 と 3.0   の新機能
C#2.0•   Generics•   匿名メソッド•   イテレータ (yield)•   Partial Type•   Nullable 型•   アクセサのアクセスレベル•   static クラス•   namespace alia...
C#3.0•   暗黙的型付け•   パーシャルメソッド•   自動プロパティ•   オブジェクト イニシャライザ•   コレクション イニシャライザ•   暗黙型付け配列•   匿名型 (Anonymous Types)•   拡張メソッド•...
Demo
C#2.0と3.0の新機能について・多くがシンタックス シュガー・当たり前だが、使わなくてもプログラムは書ける
C#2.0と3.0の新機能について• A: 「C#3.0 の方が簡潔に意図を表現できる」• B: 「でも C# 3.0 の文法がなくても、同じことは書ける。新たな文法  を採用しなくても、要は、書ければなんでもいいのであって」• A: 「それっ...
「きれいなコードは好きですか?」~品質の高いソースコードを書くコツ~ 意図を表現編
C#2.0C#3.0 への布石•   Generics•   匿名メソッド•   イテレータ (yield)•   static クラス
Generics• C++ で言うところの template に似ている• “型をパラメータに持つ型”を作るclass Stack<T>{    List<T> items = new List<T>();    public void Pus...
匿名メソッド• インラインにメソッドを記述• ブロック スコープをデリゲートに  (=クロージャ)static void Sample3(string captionText){    userInput.KeyInput += delegat...
イテレータ (yield)• Enumerable や IEnumerator インタフェース  (foreach などに必要) を簡単に作成class 自然数{    readonly int max = 1;    public 自然数(i...
C#3.0• より簡潔に意図が記述  できるようになった• Linq がメイン–ほとんどの新機能は Linq に通じ る
暗黙的型付け (var)• 型がなくなるわけじゃない• object で受けるのとは違う  – インテリセンスが利くvar point = new { X=100, Y=200 };Demo:
パーシャルメソッド• メソッドの宣言と定義を分離• 実装があれば実行、なければ何もしないpartial class PertialMethodSample{    static partial void DoSomething();    st...
自動プロパティ// 1.0~2.0string name;public string Name{    get { return name; }    set { name = value; }}// 3.0public string Name...
オブジェクト イニシャライザ• インスタンス化とプロパティ設定を一行で// 1.0~2.0// プロパティをひとつずつ設定Point point = new Point();point.X = 1;point.Y = 2;// またはコンストラ...
コレクション イニシャライザ• ICollection<T> を配列感覚で初期化// 1.0~2.0List<Point> list = new   List<Point>();list.Add(new Point(10,   20));lis...
暗黙型付け配列• new で配列を作成するときに型を  省略var array = new[] {1, 2, 3, 4};
匿名型 (Anonymous Types)• 無名クラスvar book = new {    タイトル = “C#3.0入門”,    価格 = 2980};Console.WriteLine(book);
拡張メソッド• 既存クラスにインスタンスメソッドを追加public static void 回(this int 回数, Action やる){    for (int カウント = 0; カウント < 回数; カウント  ++)       ...
ラムダ式 (Lambda Expression)• 匿名メソッドの発展形Func<int, int, int> funcA = delegate(int x, int y) { return x +   y; };Func<int, int, ...
5. Linq
Linq概要• Linq  Language-INtegrated Query  (言語に統合されたクエリ)
Linq とは• データの集合から簡単な記述で『必要なオブ  ジェクト』の『必要なメンバ』のみを『必要と  する順序』で取り出せるようにしたシンタック  スシュガー – 開発者は抽出条件、抽出するメンバ、抽出順序に   のみ関心を払う – 取り...
Linq の種類   C#                     VB                  その他の言語                     .NET LINQLINQ to   LINQ to               ...
データベース関連のLinq               .NET LINQ• データベース周りのLinq LINQ to   LINQ to              LINQ to SQL   DataSets                ...
Linq to Object •IEnumerable<T> なオブジェクトをクエリvar bookList = new[] {                new { タイトル = "C#入門"          , ISBNコード = "...
Linq to DataSet•DataSet をクエリvar ds = new DataSet();testTableAdapter.Fill(ds);var accounts = from aBook in ds.Book         ...
Linq to SQL•SQL Server のデータベースをクエリusing (var db = new DataClasses1DataContext()) {    var accounts = from aBook in db.Book...
LINQ to SQL の特長• 生成されるSQL文はパラメータクエ  リ• 追加/更新/削除時には自動的に  トランザクションになる –DataContext.SubmitChanges() –Linq ではなく DataContext クラ...
Linq to SQL   Demo
Linq to Entities• Entity Framework による概念エ  ンティティをクエリvar accounts = from aBook in textContext.Book       where aBook.ISBNコー...
Linq to XML• XML の Xelement をクエリ   – RSS の読み込みなどに便利var xElement = XElement.Load("../../Books.xml");    var books = from aB...
Linq to XML   Demo
ASP.NET での LINQ• LinqDataSource コントロール –LINQ to SQLだけでなく各種オ  ブジェクトが利用可能
Linq とは何かIEnumerable<T> ベースのすべての情報ソースにクエリを適用する技術
Linq とは何ではないか「SQL が C# や VB で書けるよう になった」のではない
C#3.0とLinqの関係• C#3.0の言語拡張の多くは Linq  のためDemo:
Linq の特長• Expression Tree –IQueryable<T>Demo:
クエリ式• From 句からはじまる• from、let、where、join、orderby  を内部に記述• Select 句または group 句で終わる• add/update/deleteは仕様として存  在しない – データを抽出す...
クエリ式• where (抽出条件) – where book.タイトル.Contains(“.NET”) – where book.価格 < 2000• orderby (抽出順序) – orderby book.タイトル – orderby...
LINQの仕組み• クエリ式はラムダ式を引数にとる拡張メソッドが  連結された形式に変換されるvar query = from book in bookse           where book.タイトル.Contans(“C#”)    ...
LINQの仕組み• System.LINQ.Enumerable.XXX  – LINQ to Object     • 配列や List<T> などは IEnumerable から派生  – LINQ to XML     • Xelemen...
LINQの仕組み• 遅延実行 – データが実際に必要となるタイミングまでクエ   リ条件が積み重ねられる       • LINQ to SQL では最終的にデータを参照するタイミン         グ (DataBind 時など) にSQL文...
LINQによる異種データの結合• Object、XML、SQLをJOIN可  能 –IEnumerable ベースで結合  • データベース連携の部分では    全データを取り出してから必    要なものを抽出   –LINQ to SQLをI...
Linq と ADO.NET の関係• ADO.NET の進化 –ADO.NET   1.0 –ADO.NET   2.0 –ADO.NET   3.0 –ADO.NET   3.5
ADO.NET• 1.0  –Transaction Script    • SqlConnecion + SqlCommand  –Table Module    • SqlDataAdapter で         DataSet や Da...
ADO.NET• 2.0  –Table Module    • SqlDataSource    • ObjectDataSource で        型付きDataSet と専用TableAdapter
ADO.NET• 3.0  –Domain Model    • Linq to SQL で O-R マッピング             データベース                  オブジェクト
ADO.NET• 3.5  –Domain Model    • Linq to Entities で O-R マッピング  物理データモデル    論理データモデル        概念データモデル         概念データクエリ
参考情報– C#3.0の概要 • http://www.microsoft.com/japan/msdn/net/bb308966.aspx– LINQ:.NET統合言語クエリ • http://www.microsoft.com/japan/...
Hokuriku.NET Vol.7 in 福井 2011年7月30日(土) 13:30~19:00 アオッサ6F 研修室601B (福井県福井市手寄1丁目4、JR福井駅から徒歩1分) 参加費: 500円程度のカンパをお願いしています ...
C# LINQ入門
Upcoming SlideShare
Loading in …5
×

C# LINQ入門

5,244 views

Published on

2011/06/11 Hokuriku.NET C# LINQ入門
http://atnd.org/events/15800

Published in: Technology
  • Be the first to comment

C# LINQ入門

  1. 1. Hokuriku.NETC# LINQ入門 2011/06/11 小島 富治雄 福井コンピュータ株式会社
  2. 2. Agenda1. はじめに2. C# のこれから3. C#1.0 までで 押さえておくこと4. C#2.0 と 3.0 の新機能5. Linq
  3. 3. 1. はじめに
  4. 4. 福井情報技術者協会• http://fitea.org• 福井のIT産業に関わる技術者の「横のつなが り」を支援するコミュニティ FITEAのミッション – 『私たちは、福井をソフトウェア大国にするべく積 極的に活動を行い、福井の情報技術者を心豊か、ス キル豊か、フトコロ豊かにします』 主な活動 – 技術的なセミナーの誘致、自主開催、および技術者 同士の交流会 (飲み会等) の開催
  5. 5. 自己紹介• 小島 富治雄• 福井コンピュータ株式会社• Microsoft MVP for Development Tools - Visual C# 英会話 ジャグリング マイブーム 自転車通勤 万年筆
  6. 6. 自己紹介タイム• 名前• 所属や出身など• C#で好きなところ
  7. 7. 2. C# のこれから
  8. 8. Anders Hejlsberg
  9. 9. Anders Hejlsberg 談: C#の今後について 2006/02/02 at 横浜Q. 今後C#は、関数型言語として進化してい くのか?A. Yes. C#3.0 や LINQ で導入された「ラム ダ式」などの機能は、Haskell や ML など の関数型言語に触発されたものだ。 これらの機能は開発をもっと自由な形にす る。設計しているだけでワクワクするよう な機能だ。C# 3.0というのは、オブジェク ト指向言語と関数型言語の「ハッピーな結 婚」といってよいものになるだろう。
  10. 10. Anders Hejlsberg 談: C#の今後についてQ. AOP (アスペクト指向プログラミング) 機 能 (=オブジェクトに対して後付けで機能 を挿入する仕組み) を提供する予定は?A. AOP は、個人的には懐疑的。AOP が役立 つ場面もあるが副作用もある。 C# の機能 (属性や Partial Class) で代 用できるケースも多い。
  11. 11. 3. C#1.0までで押さえておくこと
  12. 12. C#1.0までで 押さえておくところ• .NET らしい Cool な書き方 –delegate と event –データバインド – 属性 (アノテーション)
  13. 13. 例• Demo –委譲による分割 →MVC構造など –データバインド • 双方向依存 → interface、delegate、event に よるデータバインド
  14. 14. データバインド <<interface>> IEnumerable<T> <<interface>> DrawingUI IDataSource<T> + OnChanged() : void DataSource + <<event>> Changed : Action<T> <<realize>>interface IDrawable Data{ void Draw(); + <<event>> Changed : Action<T>} + 追加() : voidclass DrawingUI<T> : UserControl where T : IDrawable{ interface IDataSource<T> : IEnumerable<T> IDataSource<T> dataSource = null; { event Action<T> Changed; public IDataSource<T> DataSource } { set class Data<T> : IDataSource<T> { { dataSource = value; List<T> list = new List<T>(); value.Changed += OnChanged; } public event Action<T> Changed; private get { return dataSource; } } public void Add(T item) { public void Draw() list.Add(item); { if (Changed != null) if (DataSource != null) Changed(item); DataSource.ForEach(item => item.Draw()); } } public IEnumerator<T> GetEnumerator() void OnChanged(T item) { return list.GetEnumerator(); } { item.Draw(); IEnumerator IEnumerable.GetEnumerator() } { return list.GetEnumerator(); }} }
  15. 15. DrawingUI DataSource + OnChanged() : void IDataSource<T> - drawingUI <<realize>> Data Application - data + <<event>> Changed : Action<T> + 追加() : voiddrawingUI.DataSource = data; データバインド
  16. 16. 例• Demo –C#2.0、3.0 による進化 –オブジェクトへの委譲 → メソッ ドへの委譲 • class → delegate → 匿名メソッド (クロージャ) → ラムダ式 • yield による継続
  17. 17. 3. C#2.0 と 3.0 の新機能
  18. 18. C#2.0• Generics• 匿名メソッド• イテレータ (yield)• Partial Type• Nullable 型• アクセサのアクセスレベル• static クラス• namespace alias qualifier• extern alias• #pragma• Conditional 属性• 固定長配列• デリゲートの Covariance/Contravariance
  19. 19. C#3.0• 暗黙的型付け• パーシャルメソッド• 自動プロパティ• オブジェクト イニシャライザ• コレクション イニシャライザ• 暗黙型付け配列• 匿名型 (Anonymous Types)• 拡張メソッド• ラムダ式 (Lambda Expression)• LINQ
  20. 20. Demo
  21. 21. C#2.0と3.0の新機能について・多くがシンタックス シュガー・当たり前だが、使わなくてもプログラムは書ける
  22. 22. C#2.0と3.0の新機能について• A: 「C#3.0 の方が簡潔に意図を表現できる」• B: 「でも C# 3.0 の文法がなくても、同じことは書ける。新たな文法 を採用しなくても、要は、書ければなんでもいいのであって」• A: 「それって、極端な言い方をすれば、アセンブリ言語があれば、他 の言語は不要ってこと?」• A: 「より意図をシンプルに書く方法ができたのなら、それは採用した いな」• B: 「新しいものを取り入れるのにはリスクがある」• A: 「『新しいものを取り入れない』リスクほどではないと思う」• A: 「 ITエンジニアは、鮫みたいなもので、前に進むのを止めたら死ん でしまう」• B: 「色々覚えるのは大変だ」• A: 「確かに。でも、使わなきゃならなくなったわけではない。選択肢 が増えただけ。今までのものを置き換えなきゃいけないわけでもない」
  23. 23. 「きれいなコードは好きですか?」~品質の高いソースコードを書くコツ~ 意図を表現編
  24. 24. C#2.0C#3.0 への布石• Generics• 匿名メソッド• イテレータ (yield)• static クラス
  25. 25. Generics• C++ で言うところの template に似ている• “型をパラメータに持つ型”を作るclass Stack<T>{ List<T> items = new List<T>(); public void Push(T item) { items.Insert(0, item); } public T Pop() { T item = items[0]; items.RemoveAt(0); return item; }}Demo:
  26. 26. 匿名メソッド• インラインにメソッドを記述• ブロック スコープをデリゲートに (=クロージャ)static void Sample3(string captionText){ userInput.KeyInput += delegate(string inputText) { string text = “ユーザー入力: "; MessageBox.Show(text + inputText, captionText); };}Demo:
  27. 27. イテレータ (yield)• Enumerable や IEnumerator インタフェース (foreach などに必要) を簡単に作成class 自然数{ readonly int max = 1; public 自然数(int max) { this.max = max; } public IEnumerator<int> GetEnumerator() { for (int number = 1; number <= max; number++) yield return number; }}Demo:
  28. 28. C#3.0• より簡潔に意図が記述 できるようになった• Linq がメイン–ほとんどの新機能は Linq に通じ る
  29. 29. 暗黙的型付け (var)• 型がなくなるわけじゃない• object で受けるのとは違う – インテリセンスが利くvar point = new { X=100, Y=200 };Demo:
  30. 30. パーシャルメソッド• メソッドの宣言と定義を分離• 実装があれば実行、なければ何もしないpartial class PertialMethodSample{ static partial void DoSomething(); static void Main(string[] args) { DoSomething(); }}partial class PertialMethodSample{ static partial void DoSomething() { Console.WriteLine("DoSomething"); }}Demo:
  31. 31. 自動プロパティ// 1.0~2.0string name;public string Name{ get { return name; } set { name = value; }}// 3.0public string Name { get; set; }
  32. 32. オブジェクト イニシャライザ• インスタンス化とプロパティ設定を一行で// 1.0~2.0// プロパティをひとつずつ設定Point point = new Point();point.X = 1;point.Y = 2;// またはコンストラクタを作成してPoint point = new Point(1, 2);// 3.0var point = new Point { X = 1, Y = 2 };
  33. 33. コレクション イニシャライザ• ICollection<T> を配列感覚で初期化// 1.0~2.0List<Point> list = new List<Point>();list.Add(new Point(10, 20));list.Add(new Point( 0, 0));list.Add(new Point(30, 10));// 3.0var list = new List<Point> { new Point { X = 10, Y = 20 }, new Point { X = 0, Y = 0 }, new Point { X = 30, Y = 10 },};
  34. 34. 暗黙型付け配列• new で配列を作成するときに型を 省略var array = new[] {1, 2, 3, 4};
  35. 35. 匿名型 (Anonymous Types)• 無名クラスvar book = new { タイトル = “C#3.0入門”, 価格 = 2980};Console.WriteLine(book);
  36. 36. 拡張メソッド• 既存クラスにインスタンスメソッドを追加public static void 回(this int 回数, Action やる){ for (int カウント = 0; カウント < 回数; カウント ++) やる();}// 使い方10.回(海に向かって叫ぶ);Demo:
  37. 37. ラムダ式 (Lambda Expression)• 匿名メソッドの発展形Func<int, int, int> funcA = delegate(int x, int y) { return x + y; };Func<int, int, int> funcL = (x, y) => x + y;Action actionA = delegate { Console.WriteLine("Hello"); };Action actionL = () => Console.WriteLine("Hello");Console.WriteLine(funcA(1, 2));Console.WriteLine(funcL(1, 2));actionA();actionL();Demo:
  38. 38. 5. Linq
  39. 39. Linq概要• Linq Language-INtegrated Query (言語に統合されたクエリ)
  40. 40. Linq とは• データの集合から簡単な記述で『必要なオブ ジェクト』の『必要なメンバ』のみを『必要と する順序』で取り出せるようにしたシンタック スシュガー – 開発者は抽出条件、抽出するメンバ、抽出順序に のみ関心を払う – 取り出すデータの型不要 – 繰り返し文不要var query = from データ変数 in データの集合 where 抽出条件 orderby 抽出順序のキー項目 select 抽出するメンバ で構成される新しいクラス;
  41. 41. Linq の種類 C# VB その他の言語 .NET LINQLINQ to LINQ to LINQ to LINQ to SQL LINQ to XMLObjects Datasets Entities Object XML Data Base
  42. 42. データベース関連のLinq .NET LINQ• データベース周りのLinq LINQ to LINQ to LINQ to SQL DataSets Entities ADO.NET Dataset Entity Client Data Context Table Entity Adapter Framework Data Base
  43. 43. Linq to Object •IEnumerable<T> なオブジェクトをクエリvar bookList = new[] { new { タイトル = "C#入門" , ISBNコード = "AAAAAAA", 価格 = 2980 }, new { タイトル = "VB入門" , ISBNコード = "BBBBBBB", 価格 = 3300 }, new { タイトル = ".NET Framework", ISBNコード = "CCCCCCC", 価格 = 7800 } }; var books = from aBook in bookList where aBook.ISBNコード == "BBBBBBB" select new { タイトル = aBook.タイトル, 価格 = aBook.価格 }; books.ForEach(item => Console.WriteLine(item));
  44. 44. Linq to DataSet•DataSet をクエリvar ds = new DataSet();testTableAdapter.Fill(ds);var accounts = from aBook in ds.Book where aBook.ISBNコード == "BBBBBBB" select new { タイトル = aBook.タイト ル, 価格 = aBook. 価格 };books.ForEach(item => Console.WriteLine(item));
  45. 45. Linq to SQL•SQL Server のデータベースをクエリusing (var db = new DataClasses1DataContext()) { var accounts = from aBook in db.Book where aBook.ISBNコード == "BBBBBBB" select new { タイトル = aBook.タイトル, 価格 = aBook.価格 }; books.ForEach(item => Console.WriteLine(item));}
  46. 46. LINQ to SQL の特長• 生成されるSQL文はパラメータクエ リ• 追加/更新/削除時には自動的に トランザクションになる –DataContext.SubmitChanges() –Linq ではなく DataContext クラスの機 能
  47. 47. Linq to SQL Demo
  48. 48. Linq to Entities• Entity Framework による概念エ ンティティをクエリvar accounts = from aBook in textContext.Book where aBook.ISBNコード == "BBBBBBB" select new { タイトル = aBook.タイトル, 価格 = aBook.価格 };books.ForEach(item => Console.WriteLine(item));
  49. 49. Linq to XML• XML の Xelement をクエリ – RSS の読み込みなどに便利var xElement = XElement.Load("../../Books.xml"); var books = from aBook in xElement.Elements() where aBook.Element("ISBNコード").Value == "BBBBBBB" select new { タイトル = aBook.Attribute("タイトル").Value, 価格 = int.Parse(aBook.Element("価格").Value) }; books.ForEach(item => Console.WriteLine(item));
  50. 50. Linq to XML Demo
  51. 51. ASP.NET での LINQ• LinqDataSource コントロール –LINQ to SQLだけでなく各種オ ブジェクトが利用可能
  52. 52. Linq とは何かIEnumerable<T> ベースのすべての情報ソースにクエリを適用する技術
  53. 53. Linq とは何ではないか「SQL が C# や VB で書けるよう になった」のではない
  54. 54. C#3.0とLinqの関係• C#3.0の言語拡張の多くは Linq のためDemo:
  55. 55. Linq の特長• Expression Tree –IQueryable<T>Demo:
  56. 56. クエリ式• From 句からはじまる• from、let、where、join、orderby を内部に記述• Select 句または group 句で終わる• add/update/deleteは仕様として存 在しない – データを抽出することが目的
  57. 57. クエリ式• where (抽出条件) – where book.タイトル.Contains(“.NET”) – where book.価格 < 2000• orderby (抽出順序) – orderby book.タイトル – orderby book.価格 descending – orderby book.タイトル, book.価格
  58. 58. LINQの仕組み• クエリ式はラムダ式を引数にとる拡張メソッドが 連結された形式に変換されるvar query = from book in bookse where book.タイトル.Contans(“C#”) orderby book.タイトル select new { book.タイトル, book.価格 };var query = books.Where(book => book.タイトル.Contans(“C#”)) .OrderBy(book => book.タイトル) .Select(book => new {book.タイトル, book.価格});
  59. 59. LINQの仕組み• System.LINQ.Enumerable.XXX – LINQ to Object • 配列や List<T> などは IEnumerable から派生 – LINQ to XML • Xelement.Decentants() が IEnumerable を返す – yieldによる実装 → 遅延実行• System.LINQ.Queryable.XXX – LINQ to SQL • System.Data.Linq.Table<T> は IQueryable から派生 – ラムダ式の右辺を積んで式のツリー(Expression Tree)を作成 – IQuaryProviderによる実装 → 遅延実行 – 継承して独自のLINQ to XXX といった仕組みを構築 可能
  60. 60. LINQの仕組み• 遅延実行 – データが実際に必要となるタイミングまでクエ リ条件が積み重ねられる • LINQ to SQL では最終的にデータを参照するタイミン グ (DataBind 時など) にSQL文が生成される var query1 = from book in db.書籍 orderby book.タイトル select new { 出版社名 = book.出版社.名前, 書籍タイトル = book.タイトル }; var query2 = from book in query1 where book.出版社名.Contains("C") select book; query2.ToList().ForEach(book => Console.WriteLine(book)); SELECT [t1].[名前] AS [出版社名], [t0].[タイトル] AS [書籍タイトル] FROM [dbo].[書籍] AS [t0] LEFT OUTER JOIN [dbo].[出版社] AS [t1] ON [t1].[ID] = [t0].[出版社ID] WHERE [t1].[名前] LIKE @p0 ORDER BY [t0].[タイトル]
  61. 61. LINQによる異種データの結合• Object、XML、SQLをJOIN可 能 –IEnumerable ベースで結合 • データベース連携の部分では 全データを取り出してから必 要なものを抽出 –LINQ to SQLをIEnumerableベー スで処理
  62. 62. Linq と ADO.NET の関係• ADO.NET の進化 –ADO.NET 1.0 –ADO.NET 2.0 –ADO.NET 3.0 –ADO.NET 3.5
  63. 63. ADO.NET• 1.0 –Transaction Script • SqlConnecion + SqlCommand –Table Module • SqlDataAdapter で DataSet や DataTable
  64. 64. ADO.NET• 2.0 –Table Module • SqlDataSource • ObjectDataSource で 型付きDataSet と専用TableAdapter
  65. 65. ADO.NET• 3.0 –Domain Model • Linq to SQL で O-R マッピング データベース オブジェクト
  66. 66. ADO.NET• 3.5 –Domain Model • Linq to Entities で O-R マッピング 物理データモデル 論理データモデル 概念データモデル 概念データクエリ
  67. 67. 参考情報– 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
  68. 68. Hokuriku.NET Vol.7 in 福井 2011年7月30日(土) 13:30~19:00 アオッサ6F 研修室601B (福井県福井市手寄1丁目4、JR福井駅から徒歩1分) 参加費: 500円程度のカンパをお願いしています (学生の方は無料です) 主催/共催: 北陸エンジニアグループ、福井情報技術者協会 (FITEA) 内容: – マイクロソフトのエバンジェリストやMVPが来福。最新のマイクロソ フト技術を解説。 – ライトニングトークスのトーカー募集中。 詳細/申込先: – Hokuriku.NET Vol.7 in 福井 : ATND (http://atnd.org/events/16219) まで

×