LINQ-полное внешнее соединение



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



Итак, следующие списки:



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

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


следует производить:



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


Я новичок в LINQ (так что простите меня, если я хромаю) и нашел довольно много решений для "LINQ Outer Joins", которые все выглядят довольно похожими, но на самом деле кажутся левое внешнее соединение.



мои попытки до сих пор идут что-то вроде этого:



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;
}


но это возвращает:



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


что я делаю не так?

597   0  

Comments

    Ничего не найдено.