C# - LINQ2

양규빈·2024년 1월 31일
0

C# 공부

목록 보기
25/30

Orderby

orderby 키워드는 LINQ에서 시퀀스(컬렉션)의 요소를 정렬하는 데 사용된다.
orderby를 사용하여 특정 속성에 따라 요소를 정렬하는 것이 가능하다.

위와 같이 orderby를 이용하여 내림차순, 혹은 오름차순으로 데이터를 정렬할 수 있다.

Select와 new

Select는 new 키워드를 이용하여, 무명으로 데이터를 출력할 수 있도록 가공하는 것이 가능하다.

상단의 아이템 구조체 데이터를 저장한 list_Inventory 객체에서 where를 이용해 조건을 설정하고, orderby를 통해, 비용을 기준으로 정렬한 데이터를,

new를 통해 데이터를 가공하여 뽑아낸 것을 확인할 수 있다.

From

from중첩을 이용한 데이터 추출에 앞서, 선제되는 조건이 있는데, 복합 데이터 내에 데이터 집합이 존재하여 from이 접근할 수 있어야 한다는 것이다.

즉, 데이터 집합(data1) ⊃ 데이터 집합(data2)에 속하는 data2에서 데이터를 추출할 수 있다는 것이다.

from으로 중첩하여, 접근한 데이터 역시 orderby를 이용하여 정렬이 가능하며
select를 통해서, 데이터를 무명을 통해 가공하는 것이 가능하다.

이렇게 가공된 데이터는 위와 같이 출력 된다.

Groupby

groupby는 시퀀스(컬렉션)의 요소들을 특정 기준에 따라 그룹화하는 작업을 수행한다.

groupby를 사용하여 데이터를 그룹화하면 해당 그룹에 속하는 요소들을 함께 처리하거나, 그룹에 대한 집계 작업을 수행할 수 있다.

groupby 키워드의 기본적인 사용법은 아래와 같다.

var groupedData = from item in collection
                  group item by item.Property into g
                  select new
                  {
                      Key = g.Key,
                      Group = g
                  };

list_Inventory를 cost 속성을 기준으로 그룹화
data.cost > 15 조건에 따라 그룹을 나누어(15보다 큰 그룹, 같거나 작은 그룹)
findData 변수에 저장한다.
findDatakey와 data로 구성된 익명 타입의 시퀀스이다.

key는 그룹의 키 값으로, true는 15보다 큰 값 그룹을, false는 15보다 같거나 작은 값 그룹을 나타낸다.
data는 해당 그룹의 데이터를 나타낸다.

foreach 루프를 통해 findData를 순회하며 킷값을 기준으로 15보다 큰값과 작은 값을 출력해줄 수 있다.

LINQ 함수

LINQ(Language-Integrated Query)은 C#에서 제공하는 쿼리 기능으로, 컬렉션 데이터를 쉽게 쿼리하고 조작할 수 있도록 도와준다.
LINQ은 일반적으로 함수와 메서드를 조합하여 사용할 수 있다.

var sortedData = collection.OrderBy(item => item.Property);

여기서 collection은 정렬하려는 요소들을 포함하는 컬렉션이고, item은 각 요소를 나타내는 변수다.
Property는 정렬에 사용할 속성을 나타낸다.

위 코드는 OderBy를 이용한, 기본적인 사용 예시이다.

ThenBy

OrderBy 메서드를 이용하여, 아이템을 정렬하는 것이 가능하다.

이렇게 OrderBy로 정렬하여 추출한 값을 ThenBy를 이용하여 이중으로 여과하여 데이터를 추출할 수 있다.
상단의 코드는 ThenBy를 이용하여 2중 조건문을 사용해 정렬한 데이터를 추출한 코드이다.

OrderBy - Where

LINQ의 기존 코드와 동일하게 메서드 LINQ 함수에서 사용되는 Where 또한, 조건문을 이용해서 특정 데이터를 추출하는 기능을 갖는다.

list_Inventory에서 LINQ의 Where 메서드를 사용하여 조건을 만족하는 요소들을 필터링.

item => item.cost >= 20 && item.cost < 60는 람다 식을 사용하여 각 요소를 매개변수 item으로 받고, cost 속성이 20 이상이고 60 미만인지를 조건으로 지정한다.

ToList: 컬렉션을 리스트로 변환하는 메서드, 변환된 리스트를 반환한다.

LINQ 확장메서드

All
: 시퀀스(컬렉션)의 모든 요소가 주어진 조건을 만족하는지를 확인하는 메서드.
All 메서드는 시퀀스의 모든 요소가 조건을 만족할 때 true를 반환하고, 그렇지 않으면 false를 반환한다.

Any
: Any 메서드는 시퀀스(컬렉션)에 요소가 있는지 여부를 확인하는 메서드.
시퀀스에 요소가 하나 이상 있으면 true를 반환하고, 요소가 없으면 false를 반환한다.

SkipWhile
: 시퀀스에서 주어진 조건을 만족하는 동안 요소를 건너뛰는 메서드.
주어진 조건을 만족하지 않는 첫 번째 요소부터 나머지 요소들을 반환한다.

TakeWhile
: 시퀀스에서 주어진 조건을 만족하는 동안 요소를 선택하는 메서드.
주어진 조건을 만족하는 요소들을 선택하여 반환, 조건을 만족하지 않는 요소를 만나면 선택을 중단한다.

Sum
: 시퀀스의 숫자 요소들의 합을 계산.
시퀀스의 숫자 요소들을 모두 더하여 합계를 반환한다.

Max
: 시퀀스의 숫자 요소들 중 최댓값을 반환하는 메서드.
시퀀스의 숫자 요소들 중 가장 큰 값을 반환한다.

Average
: 시퀀스의 숫자 요소들의 평균을 계산하는 메서드.
시퀀스의 숫자 요소들의 평균 값을 반환한다.

메서드연속으로 중첩하여 사용하는 것도 가능하다.
위 코드에서는 Where-OrderBy-Max. 총 세 개의 메서드를 중첩하여 값을 구했다.

profile
훌륭한 개발자를 꿈꾸는 중입니다

0개의 댓글