링큐는 Language Integrated Query의 약자다.

일단 지난 시간처럼 리스트를 만들어 불러오자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class OurClass
{
    public string name { get; set; }
    public int achievement { get; set; }
    public string favourite { get; set; }
}
static void Main(string[] args)
{
    List<OurClass> list = new List<OurClass>()
    { new OurClass { name = "Snow", achievement = 80, favourite = "Arts" },
        new OurClass { name = "Inar", achievement = 95, favourite = "Language" },
        new OurClass { name = "Lapis", achievement = 100, favourite = "Mathematics" },
        new OurClass { name = "Spade", achievement = 85, favourite = "Arts" },
        new OurClass { name = "Tess", achievement = 90, favourite = "Social" },
        new OurClass { name = "Rachel", achievement = 80, favourite = "Arts" } };
        }

위와 같은 리스트를 만들었다. 나는 85점 이상의 성적을 낸 친구들을 찾고 싶다.

링큐는 다음과 같이 사용할 수 있다.

from - in - (where) - select

list 안에(in) 있는 객체로부터(from) 성적이 85점 이상인 친구들을 조회한다(select)

1
var GoodAchieve = from l in list where l.achievement >= 85 select l;

마지막으로 foreach문을 돌려 콘솔창에 출력한다.

1
2
3
4
foreach (var select in GoodAchieve)
{
    Console.WriteLine(select.name);
}

이나르, 라피스, 스페이드, 테스가 조회된다.


  1. 람다식을 이용해 모두의 평균 점수를 계산해보자.
1
Console.WriteLine(list.Select(a => a.achievement).Average());

88.33 이 나온다.

  1. 점수가 낮은 순서대로 이름을 정렬하자.
1
2
3
var sorted = from l in list orderby l.achievement select l.name;
foreach (var s in sorted)
{ Console.WriteLine(s);}

l이라는 익명함수는 list에서 나왔는데 achievement의 순서대로 나열해서 name을 지정한다.

foreach문으로 출력.

  1. Arts를 좋아하는 친구들의 수를 출력하자.
1
2
3
4
5
6
7
8
var art = from a in list group a by a.favourite into grp select new { favourite = grp.Key, Count = grp.Count() };

list.Where(a => a.favourite == "Arts").ToList().ForEach(a => Console.WriteLine(a.name));
foreach (var s in art)
    if (s.favourite == "Arts")
        Console.WriteLine(s);
    else
        Console.WriteLine();

람다식으로 먼저 where문을 통해 Arts를 좋아하는 친구들의 이름을 출력한다.

foreach문을 통해 favourite == “Arts”가 성립할 경우 그 수를 반환하고 없을 경우 None을 반환한다.