使用组合键进行联接
此示例演示如何执行想要使用多个键来定义匹配的联接操作。 使用组合键来完成此操作。 以匿名类型或包含要比较值的命名类型的形式来创建组合键。 若要跨方法边界传递查询变量,请为该键使用重写 Equals 和 GetHashCode 的命名类型。 属性的名称以及属性出现的顺序在每个键中必须相同。
示例
以下示例演示如何使用组合键联接 3 个表中的数据:
var query = from o in db.Orders
from p in db.Products
join d in db.OrderDetails
on new {o.OrderID, p.ProductID} equals new {d.OrderID, d.ProductID} into details
from d in details
select new {o.OrderID, p.ProductID, d.UnitPrice};
组合键上的类型推理取决于这些键中属性的名称,以及属性出现的顺序。 如果源序列中属性的名称不同,则必须在键中分配新名称。 例如,如果 Orders
表和 OrderDetails
表为各自的列分别使用不同的名称,则可通过在匿名类型中分配相同的名称来创建组合键:
join...on new {Name = o.CustomerName, ID = o.CustID} equals
new {Name = d.CustName, ID = d.CustID }
还可以在 group
子句中使用组合键。