본문 바로가기
개발 공식/C#

C# LINQ where 데이터 질의 방법

by JinCoding 2022. 1. 25.
반응형

C# LINQ

우리가 필요한 정보를 얻고자 할 때

구글, 네이버, 다음 검색창에

정보에 대한 물음을 날린다.

 

검색엔진이 모든 데이터를 탐색한다면

우리가 필요한 정보를 얻기까지

몇 분 혹은 몇 시간이 걸릴 것이다.

 

검색엔진은 본인에게 있는

모든 데이터를 탐색하지 않는다.

우리가 입력한 내용과 관련된

데이터만 추출하여

우리에게 제공한다.

 

LINQ는 이러한 메커니즘을 가진다.

C#의 장점은 LINQ라고 한다.

데이터에서 찾고 싶은 부분을

간단한 질의어를 통해

뽑아낼 수 있는 게 LINQ이다.

데이터 베이스를 다뤘다면

맥락과 문법이 매우 유사하기에

습득하기 쉬울 것이다.

 

from, select, where, orderby 등

수많은 질의어가 있지만

실무에서는 딱 2가지만 알고 가면

나머지는 필요할 때

구글링 해서 적용시키면 된다.

 

오늘은 가장 많이 쓰는 where를 살펴보겠다.

 

결과 값은 10

 

배열에 10가지 숫자가 들어있다.

for문을 돌리면서 배열을 순차적으로

10이 맞는지 확인하고 있다.

굉장히 비효율적이다.

처음 배울 때는 이것도 어렵긴 하다.

내가 그랬다.

 

 

모르는 사람은 벌써 어려울 것이다.

for문과 if문 대신에 where 질의어를 썼다.

배열의 10가지 숫자를 담은 변수에

where이라는 질문을 던지는 것이다.

 

where은 이렇게 질문한다.

"numbers 안에 10이 있니?"

 

for, if는 이렇게 질문한다.

"1이 10이니?"

"2가 10이니?"

"3이 10이니?"

 

어떤 게 효율적인지는

개인의 판단에 맡긴다.

 

 

where은 알겠는데

괄호 안에는 무슨 의미?

 

괄호 안에 화살표는 '람다식'

화살표 앞에 있는 건

매개변수

화살표 뒤에 있는 건

조건식이다.

 

매개변수는 탐색할 데이터

조건식은 if문이라 생각하자.

 

where문을 단독으로 사용하면

리턴 타입이 매개변수 타입과 같다.

 

 

num타입이 IEnumerable<int>로 나온다.

방금 매개변수 타입과 같다 했지 않냐?

IEnumerable은 뭐냐!

 

우리가 for, if를 통해

10이라는 숫자를 만나면

계속해서 디버그를 찍게 되는 것처럼

 

where문도 10이라는 숫자가 정확하게

몇 개가 있는지 혹은 존재하지 않는지는

판별해주지 않는다.

 

단지, 데이터를 걸러내주는 필터링 역할이다.

매개변수 타입인 int로 리턴은 하지만

IEnumerable로 null 혹은 1개 이상의

10이라는 숫자를 담아둔다.

 

 

내가 데이터 알고 있는데

10이라는 숫자는 무조건 1개 이상이야!

그리고 난 여러 개의 10은 필요 없어!

라고 한다면 Single() 키워드를 넣어주면

num에 1개의 10만 담긴다.

 

단, 10이라는 숫자가 존재하지 않는다면

에러가 발생한다.

그걸 방지하기 위해서는

 

 

내가 데이터 알고 있는데

10이라는 숫자가 있는지 없는지는 모르겠어

만약 있으면 난 1개의 10만 필요해!

없다면 defalut 값을 줘!

참고로 int의 defalut 값은 0이다.

 

 

나는 10이라는 숫자가 있는 대로

다 필요해!

ToArray() 키워드를 사용하면

일반적인 배열로 변환된다.

이제 num에는 10이라는

숫자들로만 담겨있다.

for문을 통해 10이라는

숫자들을 가져다 쓰자.

 

 

굉장히 쉽게 풀어쓰려고 노력했는데

어려웠을 거 같다.

위의 방식을 개념만 이해한다면

개발하다 보면 자연스러운 구글링으로

다양하게 응용이 가능해진다.

 

다음에는 select문을 다뤄보겠다.

반응형

댓글