LINQ to Entities で実行される SQL(ADO.NET Entity Framework)
LINQ to Entities で内部実行される SQL は、SQL Server に標準で付属のプロファイラー(SQL Server Profiler)ツールを使って確認することができます。
コードが以下の場合(Northwind データベースの Products テーブルをクエリ)は、
Using ctx As New NorthwindEntities() Dim query = From p In ctx.Products _ Select p For Each p In query Console.WriteLine(p.ProductID & ": " & p.ProductName) Next End Using
内部実行される SQL は、
SELECT [Extent1].[ProductID] AS [ProductID], [Extent1].[ProductName] AS [ProductName], [Extent1].[SupplierID] AS [SupplierID], [Extent1].[CategoryID] AS [CategoryID], [Extent1].[QuantityPerUnit] AS [QuantityPerUnit], [Extent1].[UnitPrice] AS [UnitPrice], [Extent1].[UnitsInStock] AS [UnitsInStock], [Extent1].[UnitsOnOrder] AS [UnitsOnOrder], [Extent1].[ReorderLevel] AS [ReorderLevel], [Extent1].[Discontinued] AS [Discontinued] FROM [dbo].[Products] AS [Extent1]
となり、Products テーブル内のすべての列を取得してしまいます。LINQ to Entities で Select p と列を指定しない場合はこのようになってしまいます。
LINQ to Entities の記述を次のように列を指定するように変更した場合は、
Dim query = From p In ctx.Products _ Select p.ProductID, p.ProductName
内部実行される SQL は、
SELECT [Extent1].[ProductID] AS [ProductID], [Extent1].[ProductName] AS [ProductName] FROM [dbo].[Products] AS [Extent1]
となり、指定した列データのみを取得するように変更することができます。
なお、ADO.NET Entity Framework の基本操作については、こちらへ記述しています。
http://d.hatena.ne.jp/matu_tak/20100807/1282067329