C# Join and LINQ Join Basics

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 join
  • outerKeySelector/innerKeySelector: key selectors
  • resultSelector: 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:

Built with Hugo
Theme Stack designed by Jimmy