C#/.NET(22): LINQ
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
댓글남기기