LINQ中左外连接和右外连接的实现差异

时间:2017-05-14 16:01:06

标签: c# linq join

我在LINQ - Full Outer Join找到了这段代码:

var leftOuterJoin = from first in firstNames
                    join last in lastNames
                    on first.ID equals last.ID
                    into temp
                    from last in temp.DefaultIfEmpty(new { first.ID, Name = default(string) })
                    select new
                    {
                        first.ID,
                        FirstName = first.Name,
                        LastName = last.Name,
                    };
var rightOuterJoin = from last in lastNames
                     join first in firstNames
                     on last.ID equals first.ID
                     into temp
                     from first in temp.DefaultIfEmpty(new { last.ID, Name = default(string) })
                     select new
                     {
                         last.ID,
                         FirstName = first.Name,
                         LastName = last.Name,
                     };

包含此代码的答案得到了很多赞成,但我在这里观察到了一些错误。在左外连接中,它使用intofrom与第二个实体,在右外连接中它使用相同的。所以,这两种实现对我来说都是一样的。你能告诉我左外连接和右外连接之间的区别吗?提前谢谢。

编辑:

我认为右外连接应该是这样的:

var rightOuterJoin = from first in firstNames
                    join last in lastNames
                    on first.ID equals last.ID
                    into temp
                    from first in temp.DefaultIfEmpty(new { last.ID, Name = default(string) })
                   select new
                     {
                         last.ID,
                         FirstName = first.Name,
                         LastName = last.Name,
                     };

1 个答案:

答案 0 :(得分:1)

这是对不同类型连接的直观解释。

Visual Representation of Joins

主要区别在于 LEFT 会保留第一张表(或左表)中的所有记录,而 RIGHT 会保留第二张表中的所有记录。

即使在记录中找到NULL值,OUTER也会返回行。