如何在c#中进行完全外连接?

use*_*381 5 c# linq join

我是 C# 中 Linq 方法的新手。我正在学习连接子句,我想我理解所有三种类型的连接,即

  1. 内部联接
  2. 团体加入
  3. 左外连接

我对左外连接的理解是,它返回左源序列的所有元素,无论右序列中是否存在匹配元素。

现在我有一个场景,我想要执行左外连接,并且我想要右源序列的所有元素,无论左序列中是否有匹配元素。

我怎样才能做到这一点 ?

Akh*_*hil 3

您基本上是在询问完全外连接。在LINQ中通常使用左连接和右连接以及联合在一起。请查看以下主题

线程 1 线程 2

样本 :

var firstNames = new[]
{
    new { ID = 1, Name = "John" },
    new { ID = 2, Name = "Sue" },
};
var lastNames = new[]
{
    new { ID = 1, Name = "Doe" },
    new { ID = 3, Name = "Smith" },
};
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,
                     };
var fullOuterJoin = leftOuterJoin.Union(rightOuterJoin);
Run Code Online (Sandbox Code Playgroud)