Join
Quick notes on inner/left/right/outer joins — focusing on LINQ’s Join and Enumerable.Join.
Enumerable.Join signature:
1
2
3
4
5
6
| public static IEnumerable<TResult> Join<TOuter, TInner, TKey, TResult>(
this IEnumerable<TOuter> outer,
IEnumerable<TInner> inner,
Func<TOuter, TKey> outerKeySelector,
Func<TInner, TKey> innerKeySelector,
Func<TOuter, TInner, TResult> resultSelector)
|
Where:
outer/inner: sequences to joinouterKeySelector/innerKeySelector: key selectorsresultSelector: projector for the joined pair
MSDN-style example:
1
2
3
4
5
6
7
| var query = people.Join(
pets,
person => person,
pet => pet.Owner,
(person, pet) => new { OwnerName = person.Name, Pet = pet.Name });
foreach (var x in query)
Console.WriteLine($"{x.OwnerName} - {x.Pet}");
|
LINQ query syntax equivalent (inner join):
1
2
3
| var query = from person in people
join pet in pets on person equals pet.Owner
select new { OwnerName = person.Name, Pet = pet.Name };
|
Left join via GroupJoin:
1
2
3
| var queryGroup = from person in people
join pet in pets on person equals pet.Owner into ps
select new { OwnerName = person.Name, Pet = ps };
|
References: