LINQ - Junção externa completa

Tenho uma lista do ID das pessoas e seu primeiro nome, e uma lista do ID das pessoas e seu sobrenome. Algumas pessoas não têm nome e outras não, sobrenome; Eu gostaria de fazer uma junção externa completa nas duas listas.

Então, as seguintes listas:

ID  FirstName
--  ---------
 1  John
 2  Sue

ID  LastName
--  --------
 1  Doe
 3  Smith

Deve produzir:

ID  FirstName  LastName
--  ---------  --------
 1  John       Doe
 2  Sue
 3             Smith

Eu sou novo no LINQ (então, desculpe-me se estiver sendo manco) e encontrei algumas soluções para 'LINQ Outer Joins', que parecem muito semelhantes, mas realmente parecem ser uniões externa

Minhas tentativas até agora são mais ou menos assim:

private void OuterJoinTest()
{
    List<FirstName> firstNames = new List<FirstName>();
    firstNames.Add(new FirstName { ID = 1, Name = "John" });
    firstNames.Add(new FirstName { ID = 2, Name = "Sue" });

    List<LastName> lastNames = new List<LastName>();
    lastNames.Add(new LastName { ID = 1, Name = "Doe" });
    lastNames.Add(new LastName { ID = 3, Name = "Smith" });

    var outerJoin = from first in firstNames
        join last in lastNames
        on first.ID equals last.ID
        into temp
        from last in temp.DefaultIfEmpty()
        select new
        {
            id = first != null ? first.ID : last.ID,
            firstname = first != null ? first.Name : string.Empty,
            surname = last != null ? last.Name : string.Empty
        };
    }
}

public class FirstName
{
    public int ID;

    public string Name;
}

public class LastName
{
    public int ID;

    public string Name;
}

Mas isso retorna:

ID  FirstName  LastName
--  ---------  --------
 1  John       Doe
 2  Sue

O que estou fazendo errado

questionAnswers(13)

yourAnswerToTheQuestion