【问题标题】:How to do full outer join in c#? [duplicate]如何在 C# 中进行完全外连接? [复制]
【发布时间】:2014-05-14 19:17:01
【问题描述】:

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

  1. 内连接
  2. 群组加入
  3. 左外连接

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

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

我该怎么做?

【问题讨论】:

标签: c# linq join


【解决方案1】:

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

Thread 1 Thread 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);

【讨论】:

    【解决方案2】:

    你需要一个完整的加入,你可以做一个left join和一个right join然后union他们,因为linq to entity没有full join,例如:

            // left join: left table = TableA, right table = TableB
            var q1 = (from a in TableA
                      join b in TableB on a.ID equals b.ID into JoinedList
                      from b in JoinedList.DefaultIfEmpty()
                      select new
                      {
                          a,
                          b
                      });
    
            // right join: left table = TableB, right table = TableA
            var q2 = (from b in TableB
                      join a in TableA on b.ID equals a.ID into JoinedList
                      from a in JoinedList.DefaultIfEmpty()
                      select new
                      {
                          a,
                          b
                      });
    
            var query = q1.Union(q2).ToList();
    

    【讨论】:

      猜你喜欢
      • 2011-12-31
      • 1970-01-01
      • 2010-10-31
      • 2022-01-23
      • 2021-02-19
      • 2019-01-12
      • 2015-06-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多