LINQ 의 기능

LINQ 는 다양한 종류의 데이터에 대해 간단하고 효율적인 쿼리 기능을 제공하는 클래스이다.

백엔드 개발자를 지향하지는 않지만, 그래도 어플리케이션 안에서 DB의 흐름을 어느정도 쿼링할 수 있어야 한다.

LINQ가 제공하는 쿼리방법은 두가지가 있다.

  • 방법1. Query syntax
  • 방법2. Method syntax

개인적으로 Method syntax로 쿼링하는 편이 더 직관적이고 단순한 것 같아 애용하게 될 것 같다.

하지만, 조직에서 어떠한 방법을 쓰느냐에 따라 달라지므로 현재는 LINQ의 메소드를 써보기만 하는 수준으로 다루어보고 넘어가야겠다.

[Query syntax & Method syntax - 예시 코드]

using System;
using System.Collections.Generic;
using System.Linq; // LINQ 추가

namespace LINQ
{
	public class Person
	{
		public string Name;
		public string LastName;
		public int YearOfBirth;

		public Person(string _Name, string _LastName, int _YearOfBirth)
		{
			Name = _Name; 
			LastName = _LastName;
			YearOfBirth = _YearOfBirth;
		}

		public override string ToString()
		{
			return $"{Name} {LastName} {YearOfBirth}";
		}
	}

	internal class Program
	{
		static void Main(string[] args)
		{
			var family = new List<Person>
			{
				new Person("동규", "이", 1987),
				new Person("동건", "이", 1989),
				new Person("동희", "조", 1960),
				new Person("만식", "이", 1961)
			};

			// LINQ(1) - query syntax
			// var [인스턴스] = from [인스턴스(행이 저장될 객체)] in [테이블명] where [조건식] select [인스턴스]
			var bornAfter1980QuerySyntax = from member in family
										   where member.YearOfBirth > 1980
										   select member;

			// LINQ(2) - method syntax
			// var [인스턴스] = [테이블명].Where( [인스턴스(행이 저장될 객체)] => [조건식] )
			var bornAfter1960QuerySyntax = family.Where(
				member => member.YearOfBirth > 1960);


			foreach(var member in bornAfter1980QuerySyntax)
			{
				Console.WriteLine(member);
			}

			foreach(var member in bornAfter1960QuerySyntax)
			{
				Console.WriteLine(member);
			}
		}
	}
}
동규 이 1987
동건 이 1989
동규 이 1987
동건 이 1989
만식 이 1961

[.Orderby() - 예시 코드]

// .OrderBy: key값 기준 오름차순으로 정렬 
IEnumerable<Person> orderByLastName = family.OrderBy(member => member.LastName);
foreach (var i in orderByLastName)
{
	Console.WriteLine(i);
}
동규 이 1987
동건 이 1989
만식 이 1961
동희 조 1960

[.Select() - 예시 코드]

// .Select: key 열만 추출
IEnumerable<int> onlyYearsOfBirth = family.Select(member => member.YearOfBirth);
foreach (var i in onlyYearsOfBirth)
{
	Console.WriteLine(i);
}
1987
1989
1960
1961

[.Average() - 예시 코드]

// .Average: key 열 평균
double averageYearOfBirth = family.Average(member => member.YearOfBirth);
Console.WriteLine(averageYearOfBirth);
1974.25

[.Any() - 예시 코드]

// .Any: 조건식 기준의 요소가 있는지 체크
bool isAnyMemberBefore1961 = family.Any(member => member.YearOfBirth < 1961);
Console.WriteLine(isAnyMemberBefore1961);
True

[.StartWith() - 예시 코드]

// .StartsWith(key): key를 갖고 있는 행 추출
IEnumerable<Person> familyWithLastNameStartingCho = family.Where(
	member => member.LastName.StartsWith("조"));
foreach (var i in familyWithLastNameStartingCho)
{
	Console.WriteLine(i);
}
동희 조 1960

[.First() - 예시 코드]

// .First(): 가장 첫번째 요소 추출
Person firstMemberByHangl = family.OrderBy(member => member.LastName).First();
Console.WriteLine(firstMemberByHangl);
동규 이 1987

[.Reverse() - 예시 코드]

// .Reverse(): key기준으로 내림차순
IEnumerable<Person> familyFromYoungestToOldest = family.OrderBy(
	member => member.YearOfBirth).Reverse();
foreach (var i in familyFromYoungestToOldest)
{
	Console.WriteLine(i);
}
동건 이 1989
동규 이 1987
만식 이 1961
동희 조 1960

태그: ,

카테고리:

업데이트:

댓글남기기