LINQ란?
LINQ(Language-INtegrated Query)의 약자인 LINQ는 데이터 질의(Query) 기능을 C#에서 사용할 수 있는 기술입니다. 쉽게 설명하자면 C#의 배열, 컬렉션, XML, DataSet 등... 에서 내가 원하는 데이터만 가져오고 싶은 경우 사용할 수 있는 기술이라고 말할 수 있습니다.
LINQ의 장단점을 알아보기 전에 LINQ가 무엇인지 다음 예제를 통해 간략하게 알아봅시다. 다음 예제는 배열에서 대문자 "A"로 시작하고 문자열의 길이가 3보다 큰 문자열을 LINQ로 추출한 뒤 콘솔에 출력합니다.
class Program
{
static void Main(string[] args)
{
string[] strArr = { "Apple", "Banana", "Car", "Angular", "Add", "Sum" };
var linqResult = from str in strArr
where str.StartsWith("A") && str.Length > 3
select str;
foreach (var str in linqResult)
Console.Write(str + " ");
}
}
[실행 결과]
Apple Angular
반복문과 조건문 없이 LINQ에서 사용할 수 있는 문법을 사용하여 원하는 문자열을 추출하였습니다.
LINQ는 C# 및 VB.net에서만 사용할 수 있습니다.
LINQ의 주요 기능
- LINQ to objects - 배열, 컬렉션, 제네릭 컬렉션에서 LINQ를 사용하여 원하는 데이터를 추출할 수 있습니다.
- LINQ to XML - XML 문서에서 LINQ를 사용하여 원하는 데이터를 추출할 수 있습니다.
- LINQ to SQL - SQL 서버의 데이터베이스와 함께 동작할 수 있습니다.
- LINQ to DataSet - DataSet에 LINQ를 사용하여 원하는 데이터를 추출할 수 있습니다.
LINQ의 장점
- SQL과 유사하므로 SQL 사용이 익숙하다면, 쉽게 접근할 수 있습니다.
- LINQ는 컴파일 시간에 타입을 체크합니다. 따라서, 프로그램 실행 전에 문제가 되는 코드를 수정할 수 있습니다.
- 반복문, 조건문을 사용하는 것보다 코드가 단순해집니다.
- LINQ의 질의는 재사용할 수 있습니다.
LINQ의 단점
- RDBMS를 사용해보지 않은 개발자에게는 어려울 수 있습니다.
- SQL과 유사하지만, 복잡한 질의(Query)는 작성할 수 없습니다.
- 질의가 잘못된 경우 for, foreach와 같은 반복문을 사용하는 것보다 성능이 저하될 수 있습니다.
LINQ 기본 구조
- from - 어떤 데이터에서 원하는 값을 추출할 것인지
- where - 원하는 값을 추출하기 위한 조건
- select - 데이터에서 어떤 항목을 추출할 것인지
LINQ의 질의 구문은 from 키워드로 시작하여 select 키워드로 끝납니다.
다음 소스 코드를 from 절부터 select 절까지 설명하겠습니다.
string[] strArr = { "Apple", "Banana", "Car", "Angular", "Add", "Sum" };
var linqResult = from str in strArr
where str.StartsWith("A") && str.Length > 3
select str;
[from 절]
from str in strArr
strArr이라는 데이터의 각 요소를 LINQ 절에서 str로 사용할 것이라고 명시합니다.
[where 절]
where str.StartsWith("A") && str.Length > 3
str은 from절에서 strArr이라는 데이터의 각 요소라고 말했습니다. 즉, str은 배열의 요소입니다.
첫 번째 문자가 "A"로 시작하고 문자열의 길이가 3보다 큰 값을 추출할 것이라고 조건을 작성했습니다.
[select 절]
select str;
select 절에는 추출하고 싶은 항목을 작성합니다. 객체인 경우 특정 프로퍼티를 명시할 수 있습니다.
다음 예제는 Person 클래스 객체로 구성된 List에서 name 프로퍼티만 추출합니다.
class Person
{
public string name;
public int age;
}
class Program
{
static void Main(string[] args)
{
List<Person> person = new List<Person>
{
new Person() { name = "Bob", age = 20},
new Person() { name = "Nick", age = 34},
new Person() { name = "John", age = 30},
};
var linqResult = from obj in person
where obj.age >= 30
select obj.name;
foreach (var name in linqResult)
Console.Write(name + " ");
}
}
[실행 결과]
Nick John
위 예제처럼 where 절에는 특정 프로퍼티에 대해 조건을 작성할 수 있으며, select 절에는 원하는 항목만 추출할 수 있습니다.
'C# > LINQ' 카테고리의 다른 글
[C#]LINQ Select절 (0) | 2022.07.10 |
---|---|
[C#]LINQ 확장 메서드 (0) | 2022.07.10 |
[C#]LINQ와 IEnumerable, IQueryable 인터페이스 (0) | 2022.07.10 |
[C#]LINQ 중복 제거 (0) | 2022.07.10 |
[C#]LINQ 질의 구문과 메서드 구문 (0) | 2022.07.10 |
댓글