LINQ — полное внешнее соединениеC#

Место общения программистов C#
Anonymous
LINQ — полное внешнее соединение

Сообщение Anonymous »

У меня есть список идентификаторов людей и их имен, а также список идентификаторов людей и их фамилий. У некоторых людей нет имени, а у некоторых нет фамилии; Я хотел бы выполнить полное внешнее соединение двух списков.
Итак, следующие списки:

Код: Выделить всё

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

ID  LastName
--  --------
1  Doe
3  Smith
Должен производить:

Код: Выделить всё

ID  FirstName  LastName
--  ---------  --------
1  John       Doe
2  Sue
3             Smith
Я нашел довольно много решений для «Внешних соединений LINQ», которые все выглядят очень похоже, но на самом деле кажутся левыми внешними соединениями.
Мои попытки пока выглядят примерно так:

Код: Выделить всё

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

List lastNames = new List();
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;
}
Но это возвращает:

Код: Выделить всё

ID  FirstName  LastName
--  ---------  --------
1  John       Doe
2  Sue
Что я делаю не так?

Подробнее здесь: https://stackoverflow.com/questions/548 ... outer-join

Вернуться в «C#»