Entity Framework - 2 [Programming]
プログラムでデータベースを扱うようになると、ほぼ確実にお目にかかるのが Join。
Sub Main() Console.OutputEncoding = System.Text.Encoding.GetEncoding(932) Console.WriteLine("vb01") Using table As New DataTable() Using con As New SqlClient.SqlConnection(My.Settings.駅データ) Using cmd As New SqlClient.SqlCommand( "SELECT s.station_name " & "FROM station AS s " & "JOIN line AS l ON s.line_cd = l.line_cd " & "WHERE l.line_name = @name " & "ORDER BY s.station_cd", con ) cmd.Parameters.Add(New SqlClient.SqlParameter("@name", "JR京浜東北線")) Using adp As New SqlClient.SqlDataAdapter(cmd) adp.Fill(table) End Using End Using End Using For Each item In table.Rows Console.WriteLine(String.Format("{0}", item("station_name"))) Next End Using End Sub
型付けされていない Data Set を使用しているので若干ながくなっているけど、動作は雰囲気で読み取れると思う。これを LINQ を使って書き直すとこうなる。
Sub Main() Console.OutputEncoding = System.Text.Encoding.GetEncoding(932) Console.WriteLine("vb03") Using ex = New 駅データEntities() Dim query = From s In ex.Stations Join l In ex.Lines On s.line_cd Equals l.line_cd Where l.line_name = "JR京浜東北線" Order By s.station_cd Select New With {s.station_name} For Each item In query Console.WriteLine(String.Format("{0}", item.station_name)) Next End Using End Sub
これでも一応は動作するのだけれど、もう少し手を入れられる。
Sub Main()
Console.OutputEncoding = System.Text.Encoding.GetEncoding(932)
Console.WriteLine("vb03")
Using ex = New 駅データEntities()
Dim query =
From s In ex.Stations
Where s.Line.line_name = "JR京浜東北線"
Order By s.station_cd
Select New With {s.station_name}
For Each item In query
Console.WriteLine(String.Format("{0}", item.station_name))
Next
End Using
End Sub
LINQ を利用すると Join 句を消し去ることができることがある。代わりに登場するのがコレクションを介して参照先のテーブルにアクセスするコード。完全に同じ動作になるわけではないけど、SQL が生理的に馴染まないというプログラマにはお勧めの構文になる。
ソースコードからは読み取れないのだけど、データベースから ADO.NET Entity Data Model を作成することでこのようなカラクリが埋め込まれる。
コメント 0