방법: 왼쪽 외부 조인 수행(C# 프로그래밍 가이드)

업데이트: 2007년 11월

왼쪽 외부 조인은 두 번째 컬렉션에 연관된 요소가 있는지 여부에 상관없이 첫 번째 컬렉션의 각 요소가 반환되는 조인입니다. LINQ를 사용하면 그룹 조인의 결과에서 DefaultIfEmpty을 호출하여 왼쪽 외부 조인을 수행할 수 있습니다.

예제

다음 예제에서는 그룹 조인의 결과에서 DefaultIfEmpty 메서드를 사용하여 왼쪽 외부 조인을 수행하는 방법을 보여 줍니다.

두 컬렉션의 왼쪽 외부 조인을 생성하는 첫 번째 단계는 그룹 조인을 사용하여 내부 조인을 수행하는 것입니다. 이 프로세스에 대한 설명은 방법: 내부 조인 수행(C# 프로그래밍 가이드)을 참조하십시오. 이 예제에서 Person 개체 목록은 Pet.Owner와 일치하는 Person 개체를 기반으로 Pet 개체 목록에 내부 조인됩니다.

두 번째 단계는 해당 요소가 오른쪽 컬렉션에 일치하는 항목이 없는 경우에도 결과 집합에서 첫 번째(왼쪽) 컬렉션의 각 요소를 포함하는 것입니다. 이렇게 하려면 그룹 조인에서 일치하는 요소의 각 시퀀스에 DefaultIfEmpty를 호출합니다. 이 예제에서는 일치하는 Pet 개체의 각 시퀀스에서 DefaultIfEmpty가 호출됩니다. 임의의 Person 개체에 대해 일치하는 Pet 개체의 시퀀스가 비어 있는 경우 단일 기본값이 포함된 컬렉션이 반환되므로 결과 컬렉션에서 각 Person 개체가 나타나게 됩니다.

참고:

참조 형식의 기본값은 null입니다. 따라서 예제에서는 각 Pet 컬렉션의 각 요소에 액세스하기 전에 null 참조를 검사합니다.

class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

class Pet
{
    public string Name { get; set; }
    public Person Owner { get; set; }
}

public static void LeftOuterJoinExample()
{
    Person magnus = new Person { FirstName = "Magnus", LastName = "Hedlund" };
    Person terry = new Person { FirstName = "Terry", LastName = "Adams" };
    Person charlotte = new Person { FirstName = "Charlotte", LastName = "Weiss" };
    Person arlene = new Person { FirstName = "Arlene", LastName = "Huff" };

    Pet barley = new Pet { Name = "Barley", Owner = terry };
    Pet boots = new Pet { Name = "Boots", Owner = terry };
    Pet whiskers = new Pet { Name = "Whiskers", Owner = charlotte };
    Pet bluemoon = new Pet { Name = "Blue Moon", Owner = terry };
    Pet daisy = new Pet { Name = "Daisy", Owner = magnus };

    // Create two lists.
    List<Person> people = new List<Person> { magnus, terry, charlotte, arlene };
    List<Pet> pets = new List<Pet> { barley, boots, whiskers, bluemoon, daisy };

    var query = from person in people
                join pet in pets on person equals pet.Owner into gj
                from subpet in gj.DefaultIfEmpty()
                select new { person.FirstName, PetName = (subpet == null ? String.Empty : subpet.Name) };

    foreach (var v in query)
    {
        Console.WriteLine("{0,-15}{1}", v.FirstName + ":", v.PetName);
    }
}

// This code produces the following output:
//
// Magnus:         Daisy
// Terry:          Barley
// Terry:          Boots
// Terry:          Blue Moon
// Charlotte:      Whiskers
// Arlene:

코드 컴파일

  • Visual Studio에서 콘솔 응용 프로그램 프로젝트를 새로 만듭니다.

  • 아직 참조되지 않았다면 System.Core.dll에 대한 참조를 추가합니다.

  • System.Linq 네임스페이스를 포함합니다.

  • 예제에서 코드를 복사하여 Main 메서드 아래의 program.cs 파일에 붙여넣습니다. Main 메서드에 코드 줄을 추가하여 붙여넣은 메서드를 호출합니다.

  • 프로그램을 실행합니다.

참고 항목

작업

방법: 내부 조인 수행(C# 프로그래밍 가이드)

방법: 그룹화 조인 수행(C# 프로그래밍 가이드)

개념

조인 작업

익명 형식

참조

Join

GroupJoin

익명 형식(C# 프로그래밍 가이드)