DLINQ その2
前に続けてDLINQでJoinしたときには、どんなSQL文が流れるのか?
テーブルはこんなの。名前は適当
hd ----------- id(pkey) data bd ----------- id(pkey) seq(pkey) data
ついでにInsertとDeleteも調べる。
下のサンプルの前半でデータ消してInsertもしてる。
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication4 { class Program { static void Main(string[] args) { DataClasses1DataContext dc = new DataClasses1DataContext( "Data Source=Gerbera;Initial Catalog=recordings;User ID=sa;Password=p"); //dc.hd.ToList().ForEach( // h => dc.hd.DeleteOnSubmit(h)); //dc.bd.ToList().ForEach( // b => dc.bd.DeleteOnSubmit(b)); dc.hd.DeleteAllOnSubmit(dc.hd); dc.bd.DeleteAllOnSubmit(dc.bd); dc.SubmitChanges(); Enumerable.Range(0, 10).ToList().ForEach( i => { hd hd = new hd(); hd.id = i; hd.data = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"); dc.hd.InsertOnSubmit(hd); Enumerable.Range(0, 2).ToList().ForEach( j => { bd bd = new bd(); bd.id = i; bd.seq = j; bd.data = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"); dc.bd.InsertOnSubmit(bd); }); }); dc.SubmitChanges(); var rtn = from h in dc.hd join b in dc.bd on h.id equals b.id select new {hid = h.id,hdata = h.data,bseq = b.seq , bdata = b.data}; foreach(var r in rtn) { Console.WriteLine("{0},{1},{2},{3}", r.hid, r.hdata, r.bseq, r.bdata); } Console.ReadKey(); } } }
これを動かしたときに流れるSQL文がこれ。
SELECT [t0].[id] AS [hid], [t0].[data] AS [hdata], [t1].[seq] AS [bseq], [t1].[data] AS [bdata] FROM [dbo].[hd] AS [t0] INNER JOIN [dbo].[bd] AS [t1] ON [t0].[id] = [t1].[id]
ちゃんとJoinしてくれている。