联接运算

更新:2007 年 11 月

将两个数据源“联接”就是将一个数据源中的对象与另一个数据源中共享某个公共属性的对象关联起来。

当查询所面向的数据源相互之间具有无法直接领会的关系时,联接就成为一项重要的运算。在面向对象的编程中,这可能意味着在未建模对象之间进行关联,例如对单向关系进行反向推理。下面是单向关系的一个示例:Customer 类有一个类型为 City 的属性,但 City 类没有作为 Customer 对象集合的属性。如果您具有一个 City 对象列表,并且要查找每个城市中的所有客户,则可以使用联接运算完成此项查找。

LINQ 框架中提供的联接方法有 JoinGroupJoin。这些方法执行同等联接,即根据两个数据源的键是否相等来匹配这两个数据源的联接。(与此相较,Transact-SQL 支持除“等于”之外的联接运算符,例如,“小于”运算符。) 用关系数据库术语表达,就是说 Join 实现了内部联接,这种联接只返回那些在另一个数据集中具有匹配项的对象。GroupJoin 方法在关系数据库术语中没有直接的等效项,但它实现了内部联接和左外部联接的超集。左外部联接是这样一种联接,它返回第一个(左)数据源的每个元素,即使该元素在另一个数据源中没有关联元素。

下图显示了一个概念性视图,其中包含两个集合以及这两个集合中的那些包含在内部联接或左外部联接中的元素。

显示内部/外部的两个重叠圆圈。

方法

方法名

说明

C# 查询表达式语法

Visual Basic 查询表达式语法

更多信息

Join

根据键选择器函数联接两个序列并提取值对。

join … in … on … equals …

From x In …, y In … Where x.a = b.a

- 或 -

Join … [As …]In … On …

Enumerable.Join

Queryable.Join

GroupJoin

根据键选择器函数联接两个序列,并对每个元素的结果匹配项进行分组。

join … in … on … equals … into …

Group Join … In … On …

Enumerable.GroupJoin

Queryable.GroupJoin

有关如何执行联接运算的更多信息

Topic Location
如何:执行左外部联接(C# 编程指南) C# 程序员参考
如何:执行分组联接(C# 编程指南) C# 程序员参考
如何:使用复合键进行联接(C# 编程指南) C# 程序员参考
join 子句(C# 参考) C# 程序员参考
如何:对 Join 子句的结果进行排序(C# 编程指南) C# 程序员参考
如何:执行自定义联接操作(C# 编程指南) C# 程序员参考
如何:执行内部联接(C# 编程指南) C# 程序员参考
如何:联接不同文件的内容 (LINQ) 语言集成查询 (LINQ)
如何:从多个源填充对象集合 (LINQ) 语言集成查询 (LINQ)
如何:执行左外部联接(C# 编程指南) dv_csref
如何:执行分组联接(C# 编程指南) dv_csref
如何:使用复合键进行联接(C# 编程指南) dv_csref
join 子句(C# 参考) dv_csref
如何:对 Join 子句的结果进行排序(C# 编程指南) dv_csref
如何:执行自定义联接操作(C# 编程指南) dv_csref
如何:执行内部联接(C# 编程指南) dv_csref
如何:联接不同文件的内容 (LINQ) dv_Linq
如何:从多个源填充对象集合 (LINQ) dv_Linq
如何:执行左外部联接(C# 编程指南) dv_csref
如何:执行分组联接(C# 编程指南) dv_csref
如何:使用复合键进行联接(C# 编程指南) dv_csref
join 子句(C# 参考) dv_csref
如何:对 Join 子句的结果进行排序(C# 编程指南) dv_csref
如何:执行自定义联接操作(C# 编程指南) dv_csref
如何:执行内部联接(C# 编程指南) dv_csref
如何:联接不同文件的内容 (LINQ) dv_Linq
如何:从多个源填充对象集合 (LINQ) dv_Linq

请参见

任务

如何:构建联接和叉积查询 (LINQ to SQL)

概念

标准查询运算符概述

匿名类型

联接类型

参考

System.Linq

匿名类型(C# 编程指南)