Linq to sql linq如何在内部和外部之间做出决定;外连接
通常linq在查询时使用左外部联接,但在某些情况下,它决定使用内部联接。 我遇到这样一种情况,即该决定会导致错误的结果,因为第二个表并不总是有合适的记录,这会从第一个表中删除记录。 我在dbml上使用linqdatasource,其中相关的表是相同的,但有一个表保存从第一个表中删除的历史记录。两者都有相同的主键。我使用dataloadoption一次加载两个表,而不需要往返 你能解释为什么linq决定在这里使用内部连接吗Linq to sql linq如何在内部和外部之间做出决定;外连接,linq-to-sql,Linq To Sql,通常linq在查询时使用左外部联接,但在某些情况下,它决定使用内部联接。 我遇到这样一种情况,即该决定会导致错误的结果,因为第二个表并不总是有合适的记录,这会从第一个表中删除记录。 我在dbml上使用linqdatasource,其中相关的表是相同的,但有一个表保存从第一个表中删除的历史记录。两者都有相同的主键。我使用dataloadoption一次加载两个表,而不需要往返 你能解释为什么linq决定在这里使用内部连接吗 谢谢不,很遗憾你错了。LINQJoin运算符始终执行内部联接 如果要执行左
谢谢不,很遗憾你错了。LINQ
Join
运算符始终执行内部联接
如果要执行左外部联接,则需要使用select或foreach的组合。参见以下示例:
或者google it,有很多例子。最好的做法是尽可能不使用连接操作符,而是依赖于遍历在实体之间的数据上下文中建立的关系
from r in Rabbits
select
{
r.Name
r.Parent.Name
}
这将自动遍历父关系并决定要运行的适当sql
适当地使用.DefaultIfEmpty()将意味着添加任何空条目,因此将其转换为适当的外部联接。这可以通过包含“into”来与join操作符一起使用
ps如果你彻底学习了
选择操作符,你可以不用加入操作符就可以离开。我正在这样做,并使用dataloadoptions在同一个查询中同时获取Rabbit和Parent。我的问题是linq如何决定Rabit和父级之间要使用的联接类型?这取决于您从中选择的内容以及关系中涉及的字段是否可以为空。