すべての注文の詳細を選択するための LINQ を次に示します。product テーブルとの結合を作成して、製品名を取得します。
var query = from od in db.Order_Details
join p in db.Products on od.ProductID equals p.ProductID
select new { od.OrderID, od.ProductID, p.ProductName };
Join が存在することを知らなかった場合の方法は次のとおりです。
var query = from od in db.Order_Details
select new { od.OrderID,
od.ProductID,
ProductName = (from p in db.Products
where p.ProductID == od.ProductID
select p.ProductName).First()
};
それらは異なる基になる SQL コードを生成します。最初の方法は 2 番目の方法よりも高速ですか? もしそうなら、その理由は?
到着予定時刻:
結合クエリの db.Log:
SELECT [t0].[OrderID], [t0].[ProductID], [t1].[ProductName]
FROM [dbo].[Order Details] AS [t0]
INNER JOIN [dbo].[Products] AS [t1] ON [t0].[ProductID] = [t1].[ProductID]
2 番目のクエリの db.Log:
SELECT [t0].[OrderID], [t0].[ProductID], (
SELECT TOP (1) [t1].[ProductName]
FROM [dbo].[Products] AS [t1]
WHERE [t1].[ProductID] = [t0].[ProductID]
) AS [ProductName]
FROM [dbo].[Order Details] AS [t0]