Verknüpfen mithilfe eines zusammengesetzten SchlüsselsJoin by using composite keys

In diesem Beispiel erfahren Sie, wie sie Verknüpfungsvorgänge durchführen können, in denen Sie mehr als einen Schlüssel zur Definition einer Übereinstimmung verwenden möchten.This example shows how to perform join operations in which you want to use more than one key to define a match. Dies können Sie mithilfe eines zusammengesetzten Schlüssels machen.This is accomplished by using a composite key. Ein zusammengesetzter Schlüssel wird als anonymer oder benannter Typ mit den Werten, die Sie vergleichen möchten, erstellt.You create a composite key as an anonymous type or named typed with the values that you want to compare. Wenn die Abfragevariable methodengrenzenübergreifend übergeben wird, verwenden Sie einen benannten Typ, der Equals und GetHashCode für den Schlüssel außer Kraft setzt.If the query variable will be passed across method boundaries, use a named type that overrides Equals and GetHashCode for the key. Der Name der Eigenschaften und die Reihenfolge, in der diese auftreten, muss in jedem Schlüssel identisch sein.The names of the properties, and the order in which they occur, must be identical in each key.

BeispielExample

In folgendem Beispiel erfahren Sie, wie Sie einen zusammengesetzten Schlüssel verwenden können, um Daten aus drei Tabellen zu verknüpfen: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};  

Typrückschluss für zusammengesetzte Schlüssel hängt von den Namen der Eigenschaften in den Schlüsseln und deren Reihenfolge ab.Type inference on composite keys depends on the names of the properties in the keys, and the order in which they occur. Wenn die Eigenschaften der Quellsequenz nicht dieselben Namen haben, müssen Sie ihnen im Schlüssel neue Namen zuweisen.If the properties in the source sequences do not have the same names, you must assign new names in the keys. Wenn in den Tabellen Orders und OrderDetails beispielsweise unterschiedliche Namen für die Spalten verwendet werden, können Sie zusammengesetzte Schlüssel erstellen, indem Sie identische Namen in den anonymen Typen zuweisen: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 }  

Zusammengesetzte Schlüssel können auch in einer group-Klausel verwendet werden.Composite keys can be also used in a group clause.

Siehe auchSee also

LINQ-AbfrageausdrückeLINQ query expressions
join-Klauseljoin clause
group-Klauselgroup clause