如何在 C# 中进行完全外连接? [复制]
Posted
技术标签:
【中文标题】如何在 C# 中进行完全外连接? [复制]【英文标题】:How to do full outer join in c#? [duplicate] 【发布时间】:2014-05-14 19:17:01 【问题描述】:我是 C# 中 Linq 方法的新手。我正在学习Join clause,我想我了解所有三种类型的连接,即
-
内连接
群组加入
左外连接
我对@987654322@的理解是它返回左源序列的所有元素,无论右序列中是否存在匹配元素。
现在我有一个场景,我想执行Left Outer Join 并且我想要右源序列的所有元素,无论左序列中是否存在匹配元素。
我该怎么做?
【问题讨论】:
连接的类型不止三种。您想要的联接类型称为外部联接 好的,那么哪种类型的连接将涵盖我的场景? 您不能在 LINQ 中像在 SQL 中那样执行此操作 ***.com/a/13503860/1398425 供您参考:blog.codinghorror.com/a-visual-explanation-of-sql-joins 【参考方案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();
【讨论】:
以上是关于如何在 C# 中进行完全外连接? [复制]的主要内容,如果未能解决你的问题,请参考以下文章