Sprzęganie za pomocą kluczy złożonychJoin by using composite keys

Ten przykład przedstawia sposób wykonywania operacji łączenia, w których chcesz użyć więcej niż jednego klucza do zdefiniowania dopasowania.This example shows how to perform join operations in which you want to use more than one key to define a match. Jest to realizowane przy użyciu klucza złożonego.This is accomplished by using a composite key. Można tworzyć złożonego klucza jako typu anonimowego lub nazwane wpisane wartościami, które chcesz porównać.You create a composite key as an anonymous type or named typed with the values that you want to compare. Jeśli zmienna zapytania zostaną przekazane w granicach metody, należy użyć typu nazwanego, który zastępuje Equals i GetHashCode dla klucza.If the query variable will be passed across method boundaries, use a named type that overrides Equals and GetHashCode for the key. Nazwy właściwości i kolejność, w jakiej występują one muszą być identyczne w każdy klucz.The names of the properties, and the order in which they occur, must be identical in each key.

PrzykładExample

Poniższy przykład pokazuje sposób użycia klucza złożonego do łączenia danych z trzech tabel: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};

Wnioskowanie o typie na klucze złożone zależy od nazwy właściwości kluczy i kolejności ich występowania.Type inference on composite keys depends on the names of the properties in the keys, and the order in which they occur. Jeśli właściwości w sekwencji źródłowej nie ma takie same nazwy, należy przypisać nowe nazwy w kluczach.If the properties in the source sequences don't have the same names, you must assign new names in the keys. Na przykład jeśli Orders tabeli i OrderDetails tabeli każdego używać różnych nazw kolumn, można utworzyć kluczy złożonych, przypisując identyczne nazwy typów anonimowych: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 }

Klucze złożone, które mogą być również używane w group klauzuli.Composite keys can be also used in a group clause.

Zobacz takżeSee also