Languague/C# / / 2025. 4. 8. 22:01

[C# LINQ] Join 사용법 null 오류 발생 시 해결법 알아보기(System.NullReferenceException)

300x250

 



LINQ에서 두 개의 리스트를 연결할 일이 생기면 Join()을 자주 쓰게 된다.
근데 처음 쓰면 조금 헷갈리고, null 오류도 은근 자주 난다. 그래서 정리해봤다.


📚 목차

  1. Join 기본 구조
  2. 사용자 + 주문 예제
  3. null 오류와 에러 메시지
  4. Left Join 구현
  5. Join 주의사항 요약
  6. 마무리

1. Join 기본 구조

Join은 이렇게 생겼다:

var 결과 = 컬렉션1.Join(
    컬렉션2,
    x => x.기준값,
    y => y.기준값,
    (x, y) => 새로운형태
);
  • 기준값: 두 리스트를 연결할 공통 키 (예: Id)
  • 새로운형태: 조인된 두 항목을 조합한 결과 (보통 익명 타입)

여기까지는 괜찮은데, 문제는 조건이 안 맞거나 값이 없을 때다.


2. 사용자 + 주문 예제

이 예제는 자주 쓰인다. 사용자 ID를 기준으로 주문 정보와 붙여보기:

var users = new List<User>
{
    new User { Id = 1, Name = "홍길동" },
    new User { Id = 2, Name = "김영희" }
};

var orders = new List<Order>
{
    new Order { OrderId = 1, UserId = 1, Product = "노트북" },
    new Order { OrderId = 2, UserId = 1, Product = "마우스" },
    new Order { OrderId = 3, UserId = 3, Product = "키보드" } // 없는 사용자
};

var result = users.Join(
    orders,
    u => u.Id,
    o => o.UserId,
    (u, o) => new { u.Name, o.Product }
).ToList();

foreach (var item in result)
{
    Console.WriteLine($"{item.Name}님이 {item.Product} 주문함");
}

 
출력 결과:

홍길동님이 노트북 주문함
홍길동님이 마우스 주문함

→ 김영희는 주문이 없고, 주문 3번은 사용자와 매칭되지 않아 누락된다.


3. null 오류와 에러 메시지

값이 없을 때 조심해야 할 에러는 이거다:

System.NullReferenceException: 'Object reference not set to an instance of an object.'
var user = users.FirstOrDefault(x => x.Id == 3); // null
Console.WriteLine(user.Name); // ❌ 여기서 에러

 
이럴 땐 아래 방법 중 하나 써야 한다:

  • 널 조건 연산자 ?. → user?.Name
  • 조건문으로 체크 → if (user != null)

4. Left Join 구현

LINQ의 기본 Join은 Inner Join이다. 즉, 한쪽에 없으면 결과에서 빠진다.
Left Join처럼 쓰고 싶으면 이렇게:

var leftJoin = users.GroupJoin(
    orders,
    u => u.Id,
    o => o.UserId,
    (u, os) => new { u.Name, Orders = os.DefaultIfEmpty() }
)
.SelectMany(
    x => x.Orders,
    (user, order) => new { user.Name, Product = order?.Product ?? "주문 없음" }
).ToList();
홍길동 - 노트북
홍길동 - 마우스
김영희 - 주문 없음

 
→ DefaultIfEmpty()가 핵심이다. 없으면 null이 들어오고, 그걸 처리해주는 구조.


5. Join 주의사항 요약

  • 기본 Join = Inner Join → 누락 발생 가능
  • null 에러 자주 발생 → 조건문이나 ?. 필수
  • 키 값 타입 불일치 조심 (int vs string 같은 거)
  • Left Join은 GroupJoin + DefaultIfEmpty()

6. 마무리

Join은 정말 많이 쓰이지만, 한 번쯤 null 오류 늘 확인해둘 것! 오늘은 기본 구조부터, 예제, 그리고 실제 오류 상황까지 정리해봤고
다음 편에선 GroupJoin과 Left Join 응용을 이어서 정리해보려 한다. 

300x250
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유