【发布时间】:2010-03-14 22:01:29
【问题描述】:
假设我有一个Order 表,其中有一个FirstSalesPersonId 字段和一个SecondSalesPersonId 字段。这两个都是引用SalesPerson 表的外键。对于任何给定的订单,一个或两个销售人员都可能被记入该订单。换句话说,FirstSalesPersonId 永远不可能是NULL,但SecondSalesPersonId 可以是NULL。
当我将Order 和SalesPerson 表放到“Linq to SQL 类”设计图面上时,类构建器会发现从Order 表到SalesPerson 表的两个FK 关系,因此生成的Order 类有一个SalesPerson 字段和一个SalesPerson1 字段(我可以将其重命名为SalesPerson1 和SalesPerson2 以避免混淆)。
因为我总是希望在处理订单时获得销售人员数据,所以我使用DataLoadOptions.LoadWith 指定在填充订单实例时填充两个销售人员字段,如下所示:
dataLoadOptions.LoadWith<Order>(o => o.SalesPerson1);
dataLoadOptions.LoadWith<Order>(o => o.SalesPerson2);
问题我遇到的是 Linq to SQL 使用类似以下 SQL 的东西来加载订单:
SELECT ...
FROM Order O
INNER JOIN SalesPerson SP1 ON SP1.salesPersonId = O.firstSalesPersonId
INNER JOIN SalesPerson SP2 ON SP2.salesPersonId = O.secondSalesPersonId
如果总是有两个销售人员记录,这将是有意义的,但由于有时没有第二个销售人员(secondSalesPersonId 是 NULL),INNER JOIN 导致查询在这种情况下不返回任何记录。
我实际上想要的是将第二个INNER JOIN 更改为LEFT OUTER JOIN。有没有办法通过类生成器的 UI 来做到这一点?如果没有,我还能如何做到这一点?
(请注意,因为我几乎只使用生成的类,所以如果可以避免的话,我宁愿不要在这种情况下添加一些东西)。
编辑:根据我的评论回复,SecondSalesPersonId 字段是可为空的(在数据库中和生成的类中)。
【问题讨论】:
标签: visual-studio visual-studio-2008 linq-to-sql