gpt4 book ai didi

c# - 在 LINQ 中,Join 和从嵌套查询中选择第一项有什么区别

转载 作者:行者123 更新时间:2023-11-30 21:06:24 24 4
gpt4 key购买 nike

下面是一些用于选择所有订单详细信息的 LINQ。它创建与产品表的连接以获取产品名称:

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 代码。第一种方法比第二种方法快吗?如果是,为什么?

预计到达时间:

连接查询的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]

第二次查询的 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]

最佳答案

联接通常比等效的嵌套选择更快,因为 DBMS 非常擅长优化联接,尽管一个好的 SQL 编译器可能会将它们优化为相同的 SQL。您应该使用使您的目的更明确的那个,在这种情况下可能是连接。

关于c# - 在 LINQ 中,Join 和从嵌套查询中选择第一项有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11232735/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com