첫 번째 요소 가져오기
C#의 Linq는 데이터 집합에서 첫 번째 요소를 가져올 수 있는 기능을 제공합니다.
- First() 메서드
- FirstOrDefault() 메서드
이번 포스팅은 두 가지 함수 사용 방법을 소개합니다.
First 메서드
C#의 Linq에서 제공하는 First() 메서드는 데이터 집합에서 첫 번째 요소를 반환합니다. First() 메서드는 오버로드된 두 가지 버전이 존재합니다.
public static TSource First<TSource>(
this IEnumerable<TSource> source);
public static TSource First<TSource>(
this IEnumerable<TSource> source,
Func<TSource, bool> predicate);
첫 번째 First() 메서드는 단순히 데이터 집합의 첫 번째 요소를 반환합니다. 두 번째 First() 메서드는 Func 대리자를 인자로 가집니다. 데이터 집합에서 특정 조건을 가지는 첫 번째 요소를 반환합니다.
First() 메서드를 호출하는 데이터 집합이 null 또는 빈 값으로 할당되거나 First() 메서드의 인자로 전달된 람다식에서 조건을 만족하는 요소가 없는 경우 런타임 에러가 발생합니다.
예제 1. 사용 방법
다음 예제는 int 타입의 List에서 첫 번째 요소를 가져옵니다.
class Program
{
static void Main(string[] args)
{
List<int> intList = new List<int>()
{
10, 20, 30, 40, 50
};
int getFristElement = intList.First();
Console.WriteLine($"첫 번째 요소: {getFristElement}");
}
}
[실행 결과]
첫 번째 요소: 10
예제 2. 특정 조건을 만족하는 첫 번째 요소
이번에는 Func 대리자를 매개변수로 가지는 First() 메서드를 사용합니다. 데이터 집합의 요소를 20으로 나누었을 때, 나머지가 0인 첫 번째 요소를 가져옵니다.
class Program
{
static void Main(string[] args)
{
List<int> intList = new List<int>()
{
10, 20, 30, 40, 50
};
int getFristElement = intList.First(num => num % 20 == 0);
Console.WriteLine($"첫 번째 요소: {getFristElement}");
}
}
[실행 결과]
첫 번째 요소: 20
예제 3. 주의사항
First() 메서드를 호출하는 데이터 집합이 null로 할당된 경우 ArgumentNullException 예외가 발생합니다.
class Program
{
static void Main(string[] args)
{
List<int> intList = null;
int getFristElement = intList.First();
}
}
[에러 내용]
First() 메서드를 호출하는 데이터 집합이 빈 값으로 할당된 경우 InvalidOperationException 예외가 발생합니다.
class Program
{
static void Main(string[] args)
{
List<int> intList = new List<int>();
int getFristElement = intList.First();
}
}
[에러 내용]
Func 대리자를 가지는 First() 메서드에서 특정 조건을 만족하는 요소가 없는 경우 InvalidOperationException 예외가 발생합니다.
class Program
{
static void Main(string[] args)
{
List<int> intList = new List<int>()
{
10, 20, 30, 40, 50
};
int getFristElement = intList.First(num => num % 100 == 0);
}
}
[에러 내용]
FirstOrDefault 메서드
FirstOrDefault() 메서드는 First() 메서드와 동일한 작업을 수행하지만, 한 가지 차이점이 있습니다. 데이터 집합이 빈 값이거나 FirstOrDefault() 메서드의 인자로 전달된 람다식에서 조건을 만족하는 요소가 없더라도 예외가 발생하지 않습니다.
데이터 집합이 빈 값 또는 조건을 만족하는 요소가 없는 경우 FirstOrDefault() 메서드를 호출한 데이터 집합 타입의 Default 값을 반환합니다.
public static TSource FirstOrDefault<TSource>(this IEnumerable<TSource> source);
public static TSource FirstOrDefault<TSource>(
this IEnumerable<TSource> source,
Func<TSource, bool> predicate);
First() 메서드와 마찬가지로 오버로드된 두 가지 버전이 존재합니다.
예제 1. 사용 방법
다음 예제는 int 타입의 List에서 첫 번째 요소를 가져옵니다.
class Program
{
static void Main(string[] args)
{
List<int> intList = new List<int>()
{
10, 20, 30, 40, 50
};
int getFristElement = intList.FirstOrDefault();
Console.WriteLine($"첫 번째 요소: {getFristElement}");
}
}
[실행 결과]
첫 번째 요소: 10
예제 2. 특정 조건을 만족하는 첫 번째 요소
이번에는 int 타입의 List에서 20으로 나누었을 때, 나머지가 0인 첫 번째 요소를 가져옵니다.
class Program
{
static void Main(string[] args)
{
List<int> intList = new List<int>()
{
10, 20, 30, 40, 50
};
int getFristElement = intList.FirstOrDefault(num => num % 20 == 0);
Console.WriteLine($"첫 번째 요소: {getFristElement}");
}
}
[실행 결과]
첫 번째 요소: 20
예제 3. 첫 번째 요소가 없는 경우
이번에는 int 타입의 List에서 100으로 나누었을 때, 나머지가 0인 첫 번째 요소를 가져옵니다.
class Program
{
static void Main(string[] args)
{
List<int> intList = new List<int>()
{
10, 20, 30, 40, 50
};
int getFristElement = intList.FirstOrDefault(num => num % 100 == 0);
Console.WriteLine($"첫 번째 요소: {getFristElement}");
}
}
[실행 결과]
첫 번째 요소: 0
조건을 만족하는 요소가 없으므로 데이터 집합 타입의 Default 값을 반환합니다. 컬렉션 객체 intList는 int 타입이므로 int 타입의 Default 값이 반환됩니다.
예제 4. 주의사항
빈 값과 null은 엄연히 다른 개념입니다. 따라서, 데이터 집합이 null로 할당된 경우에는 ArgumentNullException 예외가 발생합니다.
class Program
{
static void Main(string[] args)
{
List<int> intList = null;
int getFristElement = intList.FirstOrDefault();
}
}
[에러 내용]
'C# > LINQ' 카테고리의 다른 글
[C#]LINQ 단일 값 가져오기 - Single, SingleOrDefault 메서드 (0) | 2022.08.07 |
---|---|
[C#]LINQ 마지막 요소 가져오기 - Last, LastOrDefault 메서드 (0) | 2022.08.07 |
[C#]LINQ 특정 인덱스의 값 가져오기 - ElementAt, ElementAtOrDefault 메서드 (0) | 2022.08.07 |
[C#]LINQ 크로스 조인(Cross Join) (0) | 2022.08.07 |
[C#]LINQ 왼쪽 조인(Left Join) (0) | 2022.08.06 |
댓글