Realizar una unión usando claves compuestasJoin by using composite keys

En este ejemplo se muestra cómo realizar operaciones de combinación en las que se quiere usar más de una clave para definir a una coincidencia.This example shows how to perform join operations in which you want to use more than one key to define a match. Esto se logra mediante una clave compuesta.This is accomplished by using a composite key. Una clave compuesta se crea como un tipo anónimo o un nombre con tipo con los valores que se quieren comparar.You create a composite key as an anonymous type or named typed with the values that you want to compare. Si la variable de consulta se pasará a través de límites de método, use un tipo con nombre que invalida Equals y GetHashCode para la clave.If the query variable will be passed across method boundaries, use a named type that overrides Equals and GetHashCode for the key. Los nombres de las propiedades y el orden en que aparecen deben ser idénticos en cada clave.The names of the properties, and the order in which they occur, must be identical in each key.

EjemploExample

En el ejemplo siguiente se muestra cómo usar una clave compuesta para combinar datos de tres tablas:The following example demonstrates how to use a composite key to join data from three tables:

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};

La inferencia de tipos en las claves compuestas depende de los nombres de las propiedades de las claves y el orden en que aparecen.Type inference on composite keys depends on the names of the properties in the keys, and the order in which they occur. Si las propiedades de las secuencias de origen no tienen los mismos nombres, deberá asignar nombres nuevos en las claves.If the properties in the source sequences don't have the same names, you must assign new names in the keys. Por ejemplo, si la tabla Orders y la tabla OrderDetails usan nombres diferentes para las columnas, se podrían crear claves compuestas asignando nombres idénticos a los tipos anónimos:For example, if the Orders table and OrderDetails table each used different names for their columns, you could create composite keys by assigning identical names in the anonymous types:

join...on new {Name = o.CustomerName, ID = o.CustID} equals
    new {Name = d.CustName, ID = d.CustID }

Las claves compuestas también se pueden usar en una cláusula group.Composite keys can be also used in a group clause.

Vea tambiénSee also