gpt4 book ai didi

c# - 我怎样才能让这个 SelectMany 使用 Join?

转载 作者:太空狗 更新时间:2023-10-29 23:10:29 25 4
gpt4 key购买 nike

鉴于我在 Linq To Sql 模型中有三个表(Customer、Orders 和 OrderLines),其中

客户 -- 一对多 -> 订单 -- 一对多 -> OrderLines

当我使用

var customer = Customers.First();
var manyWay = from o in customer.CustomerOrders
from l in o.OrderLines
select l;

我看到一个查询吸引了客户,这是有道理的。然后我看到对客户订单的查询,然后是对每个订单的单个查询获取订单行,而不是将两者结合起来。总共 n + 1 个查询(不包括获得客户)

但是如果我用

var tableWay = from o in Orders
from l in OrderLines
where o.Customer == customer
&& l.Order == o
select l;

然后,我看到的不是针对获取订单行的每个订单的单个查询,而是连接两个表的单个查询。总共 1 次查询(不包括获得客户)

我更愿意使用第一个 Linq 查询,因为它对我来说更具可读性,但为什么 L2S 没有像我在第一个查询中期望的那样连接表?使用 LINQPad,我看到第二个查询被编译成一个 SelectMany,尽管我没有看到第一个查询有任何变化,但不确定这是否表明我的查询存在问题。

最佳答案

我认为这里的关键是

customer.CustomerOrders

那是一个 EntitySet,而不是一个 IQueryable,因此您的第一个查询不会直接转换为 SQL 查询。相反,它被解释为许多查询,每个订单一个。

无论如何,这是我的猜测。

关于c# - 我怎样才能让这个 SelectMany 使用 Join?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6602890/

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