Where절
LINQ의 Where문은 원본 데이터에서 일부 조건을 만족하는 데이터를 추출해야하는 경우 사용됩니다.
예를 들자면, 아래 조건을 만족하는 데이터를 추출하기 위해 Where문을 사용할 수 있습니다.
- 이름이 "A"로 시작하는 문자열만 추출
- 급여가 4,000만원 이상인 직원을 추출
- 나이가 20세 이상인 사람을 추출
오버로드된 두 가지 버전
메서드 구문을 사용하여 질의를 작성하는 경우 Where() 메서드를 사용합니다. Where() 메서드는 오버로드된 두 가지 버전이 존재합니다.
public static IEnumerable<TSource> Where<TSource>(
this IEnumerable<TSource> source,
Func<TSource, bool> predicate);
public static IEnumerable<TSource> Where<TSource>(
this IEnumerable<TSource> source,
Func<TSource, int, bool> predicate);
Where() 메서드는 System.Linq 네임스페이스의 Enumerable 클래스에 존재하며 IEnumerable<T> 인터페이스의 확장 메서드입니다. 그리고 Func 대리자를 매개변수로 사용합니다.
LINQ의 확장 메서드한 내용은 아래 포스팅을 참고해주세요.
Func 대리자에 대한 내용은 아래 포스팅을 참고해주세요.
예제 1. Where절 사용 방법
Where절을 사용하는 간단한 예제입니다. int 타입의 List에서 10보다 큰 숫자를 추출합니다.
class Program
{
static void Main(string[] args)
{
List<int> liNum = new List<int>()
{
1, 3, 5, 6, 7, 9, 10
};
// 1. 질의 구문(Query Syntax)
List<int> linqQueryResult = (from num in liNum
where num > 5
select num).ToList();
// 2. 메서드 구문(Method Syntax)
List<int> linqMethodResult = liNum.Where(num => num > 5).ToList();
Console.WriteLine("질의 구문");
foreach (int num in linqQueryResult)
Console.Write(num + " ");
Console.WriteLine("\n메서드 구문");
foreach (int num in linqMethodResult)
Console.Write(num + " ");
}
}
[실행 결과]
질의 구문
6 7 9 10
메서드 구문
6 7 9 10
다음 예제는 Where절에 여러 조건문을 작성하는 방법입니다. 10보다 크고 홀수인 숫자를 추출합니다.
class Program
{
static void Main(string[] args)
{
List<int> liNum = new List<int>()
{
1, 3, 5, 6, 7, 9, 10
};
// 1. 질의 구문(Query Syntax)
List<int> linqQueryResult = (from num in liNum
where num > 5 && num % 2 != 0
select num).ToList();
// 2. 메서드 구문(Method Syntax)
List<int> linqMethodResult = liNum.Where(num => num > 5 && num % 2 != 0).ToList();
Console.WriteLine("질의 구문");
foreach (int num in linqQueryResult)
Console.Write(num + " ");
Console.WriteLine("\n메서드 구문");
foreach (int num in linqMethodResult)
Console.Write(num + " ");
}
}
[실행 결과]
질의 구문
7 9
메서드 구문
7 9
예제 2. 사용자 정의 클래스
다음 예제는 사용자 정의 클래스 타입인 List에서 Where절을 사용하는 방법입니다. 나이(Age)가 25살 이상이고 급여(Salary)가 45,000원 미만인 데이터를 추출합니다.
class Person
{
public int ID { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public int Salary { get; set; }
public override string ToString()
{
return "ID: " + ID + ", Name: " + Name + ", Age: " + Age + ", Salary: " + Salary;
}
}
class Program
{
static void Main(string[] args)
{
List<Person> person = new List<Person>
{
new Person() { ID = 100, Name = "Bob", Age = 20, Salary = 30000 },
new Person() { ID = 200, Name = "Tim", Age = 25, Salary = 40000 },
new Person() { ID = 300, Name = "Charles", Age = 30, Salary = 50000 }
};
// 1. 질의 구문(Query Syntax)
List<Person> linqQueryResult = (from obj in person
where obj.Age >= 25 && obj.Salary < 45000
select obj).ToList();
// 2. 메서드 구문(Method Syntax)
List<Person> linqMethodResult =
person.Where(obj => obj.Age >= 25 && obj.Salary < 45000).ToList();
Console.WriteLine("질의 구문");
foreach (Person obj in linqQueryResult)
Console.Write(obj.ToString());
Console.WriteLine("\n메서드 구문");
foreach (Person obj in linqMethodResult)
Console.Write(obj.ToString());
}
}
[실행 결과]
질의 구문
ID: 200, Name: Tim, Age: 25, Salary: 40000
메서드 구문
ID: 200, Name: Tim, Age: 25, Salary: 40000
반응형
'C# > LINQ' 카테고리의 다른 글
[C#]LINQ 특정 타입 추출하는 방법 - OfType 메서드 (0) | 2022.07.12 |
---|---|
[C#]LINQ 인덱스 가져오는 방법 (0) | 2022.07.12 |
[C#]LINQ SelectMany 메서드 (0) | 2022.07.10 |
[C#]LINQ Select절 (0) | 2022.07.10 |
[C#]LINQ 확장 메서드 (0) | 2022.07.10 |
댓글