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

Но это возвращает: Спасибо

Кто-нибудь знает эквивалент jQuery для window.document.write ('') в javascript? Я хотел бы найти все вызовы метода в этом файле DLL. Как я могу это сделать?

По сути, как я могу программно сделать то, что Visual Studio уже делает?

Я не хочу использовать для этого инструмент вроде .NET Reflector , но отражение это нормально и, вероятно, необходимо.

37
задан Peter Mortensen 17 September 2013 в 19:12
поделиться