아카이빙/C#

[C#] LINQ

셩님 2018. 6. 26. 14:58

[C#] LINQ

  • LINQ는 데이터 작업에 특화된 C#의 기능이다.

  • LINQ (Language INtegrated Query)의 약어. C#언어에 통합된 데이터 질의(query) 기능

  • 쿼리는 기본 적으로 다음과 같은 내용을 포함

    • From : 어떤 데이터 집합에서 찾을 것인가?

    • Where : 어떤 값의 데이터를 찾을 것인가?

    • Select : 어떤 항목을 추출할 것 인가?

LINQ 예제

  • 예를 들어보자.

  • 다음과 같이 키와 이름을 필드로 갖는 Profile 클래스가 있다.

class Profile
{
   public string Name {get; set;}
   public int Height {get; set;}

   public Profile(string name, int height)
  {
       this.Name = name;
       this.Height = height;
  }

   public override string ToString()
  {
       return string.Format("{0}, {1}", this.Name, this.Height);
  }
}
  • 그리고 Profile 배열을 만들어보자.

Profile[] arrProfile = {
           new Profile("Stephen Curry", 191),
           new Profile("Kevin Durant", 206),
           new Profile("LeBron James", 203),
           new Profile("James Harden", 196),
           new Profile("Russell Westbrook", 190)
      };

  • 여기서 키가 200 이하인 Profile들을 오름차순으로 정렬하고자 한다면?

  • LINQ를 모른다면 다음과 같이 할 것이다.

List<Profile> profiles = new List<Profile>();
foreach(Profile profile in arrProfile)
{
   if(profile.Height < 200)
       profiles.Add(profile);
}

profiles.Sort(
  (p1, p2) => {
       return p1.Height - p2.Height;
  }
);

foreach(var profile in profiles)
   Console.WriteLine(profile);

  • 그러나 LINQ를 활용하면 다음과 같이 코드를 간결히 줄일 수 있다.

var profiles2 = from profile in arrProfile
  where profile.Height < 200
    orderby profile.Height
  select profile;

foreach(var profile in profiles2)
   Console.WriteLine(profile);

참조

  • 뇌를 자극하는 C# 5.0 프로그래밍, 박상현, 한빛미디어