【发布时间】:2011-07-08 06:23:29
【问题描述】:
鉴于我在 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,虽然我看不到第一个查询的变化,但不确定这是否表明我的查询存在问题。
【问题讨论】:
-
一个订单可以有多个客户?还是那些箭头不重要?
-
一单一客。对不起,我改变了它,希望能更好地传达意思。
标签: c# linq-to-sql