linq如何决定内在与否;外连接

时间:2010-03-27 07:28:51

标签: linq-to-sql

通常linq使用左外连接进行查询,但在某些情况下,它决定使用内连接。 我有一种情况,该决定导致错误的结果,因为第二个表并不总是有合适的记录,并从第一个表中删除记录。 我在dbml上使用linqdatasource,其中相关表是相同的,但是其中一个保存从第一个中删除的历史记录。两者都有相同的主键。我正在使用dataloadoption一次性加载两个表而不进行往返。

你能解释为什么linq决定在这里使用内连接吗?

由于

2 个答案:

答案 0 :(得分:1)

不,不幸的是你不对。 LINQ Join运算符始终执行内连接。 http://www.hookedonlinq.com/JoinOperator.ashx

如果要进行左外连接,则需要使用select或foreach的组合。请参阅以下示例:

或google它,那里有很多例子。

答案 1 :(得分:1)

最好不要在可能的情况下使用join运算符,并依赖遍历实体之间数据上下文中设置的关系。

from r in Rabbits
select
{
    r.Name
    r.Parent.Name
}

这将自动遍历父关系并决定要运行的相应sql。

适当地使用.DefaultIfEmpty()意味着添加任何NULL条目,因此它被转换为适当的外连接。这可以通过包含'into'来与join运算符一起使用。

JOIN and LEFT JOIN equivalent in LINQ