[.Net Core] EF Core LINQ 확장 메서드 정리
📚 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
등)와 조합해 복잡한 쿼리 작성 가능.