C# & .NetCore

[.Net Core] EF Core LINQ 확장 메서드 정리

개발자 포비 2025. 6. 1. 18:28

📚 EF Core LINQ 확장 메서드 정리

🏷️ 필터링 및 조건

  • Where(predicate): 조건에 맞는 엔티티를 필터링한다.
    예: context.Users.Where(u => u.IsActive)

  • Any(predicate): 조건을 만족하는 엔티티가 하나라도 존재하는지 확인한다.
    예: context.Users.Any(u => u.IsBanned)

  • All(predicate): 모든 엔티티가 조건을 만족하는지 확인한다.
    예: context.Users.All(u => u.IsActive)


🏷️ 정렬

  • OrderBy(keySelector): 지정한 키로 오름차순 정렬.
    예: context.Users.OrderBy(u => u.Name)

  • OrderByDescending(keySelector): 내림차순 정렬.
    예: context.Users.OrderByDescending(u => u.CreatedAt)

  • ThenBy(keySelector) / ThenByDescending(keySelector): 다중 정렬 기준 지정.
    예: context.Users.OrderBy(u => u.Level).ThenBy(u => u.Nickname)


🏷️ 투영(Select)

  • Select(selector): 엔티티에서 특정 속성만 추출하거나 DTO로 매핑.
    예: context.Users.Select(u => new { u.Id, u.Name })

  • SelectMany(selector): 컬렉션 속성들을 평탄화(Flatten).
    예: context.Users.SelectMany(u => u.Orders)


🏷️ 집계 및 개수

  • Count() / Count(predicate): 엔티티의 개수를 반환.
    예: context.Users.Count()

  • Sum(selector): 지정 속성의 합계를 계산.
    예: context.Users.Sum(u => u.Age)

  • Average(selector): 지정 속성의 평균값 계산.
    예: context.Users.Average(u => u.Score)

  • Max(selector) / Min(selector): 최대값/최소값 계산.
    예: context.Users.Max(u => u.CreatedAt)


🏷️ 조회 및 페이징

  • First() / FirstOrDefault(): 조건에 맞는 첫 번째 엔티티 반환(없으면 기본값).
    예: context.Users.FirstOrDefault(u => u.Id == 1)

  • Single() / SingleOrDefault(): 조건에 맞는 유일한 엔티티 반환.
    예: context.Users.SingleOrDefault(u => u.Email == "test@test.com")

  • Skip(count) / Take(count): 페이징 처리.
    예: context.Users.Skip(10).Take(20)


🏷️ Include 및 로딩 관련 (EF Core 전용)

  • Include(navigation): 연관 엔티티 즉시 로드(Eager Loading).
    예: context.Users.Include(u => u.Orders)

  • ThenInclude(navigation): Include된 엔티티 내부 연관 데이터 로드.
    예: context.Users.Include(u => u.Orders).ThenInclude(o => o.Items)

  • AsNoTracking(): 엔티티 변경 추적 비활성화 (성능 최적화).
    예: context.Users.AsNoTracking()

  • AsSplitQuery(): Include 로딩을 여러 쿼리로 분리 (성능 최적화).
    예: context.Users.Include(u => u.Orders).AsSplitQuery()


✅ 요약

  • LINQ 확장 메서드는 IQueryable<T>IEnumerable<T>에 붙는 데이터 쿼리 작성 도구.
  • EF Core 전용 확장 (Include, ThenInclude, AsNoTracking, AsSplitQuery)는 DB 조회 최적화 및 로딩 관리 기능 제공.
  • 일반 LINQ 메서드(Where, OrderBy, Select, Any 등)와 조합해 복잡한 쿼리 작성 가능.