Generally, you just stack the joins just like you'd do in SQL. I see that the original question has been clarified a bit, and a composite key join is likely necessary so it will be a combination of stacking joins with composite keys. Gary.S noted the correct syntax for the composite key part in his comments to the original question, but I've ammended my answer here to include the same composite key selection. For regular joins you use the
join … in … on … equals …
And for composite keys you use anonymous types to contain all the key columns from both entities.
Here is an example that should be about what you are looking for
var items = from e in Person.BusinessEntity
join p in Person.Person on
e.BusinessEntityID equals p.BusinessEntityID
join b in Person.BusinessEntityContact on
new {e.BusinessEntityID, p.BusinessEntityID} equals
new { b.BusinessEntityID, b.PersonID}
select p;
You might also need to look at the GroupJoin, which you need in order to do a left outer join in LINQ.
Group join looks like:
join … in … on … equals … into …
Good examples of most cases can be found at the 101 samples page