Linq sample

간단한 Linq 예제에 대해서 알아보자.
Linq 메소드는 IEnumerable를 사용하여 구현한다.

콜렉션에서 IEnumerable 구하기

배열, List, Dictionary의 리턴값은 IEnumerable이다.

using System;
using System.Collections.Generic;

class Program
{
    static void Main(string[] args)
    {

        int[] array = { 1, -1, 2, -2, 3 };

        IEnumerable<int> intEnumerable = array;

        List<int> list = new List<int>();

        IEnumerable<int> listEnumerable = list;

        Dictionary<int, int> dic = new Dictionary<int, int> { { 2, 3 }, { 3, 5 }, { 6, 7 } };
        //Dictionary는 IEnumerable<KeyValuePair<TKey, TValue>>로 쌍을 만든다.
        IEnumerable<KeyValuePair<int, int>> dicEnumerable = dic;

        Console.ReadKey();
    }
}

IEnumerable.FirstOrDefault 메소드

조건에 맞는 시퀀스의 첫번째 값을 리턴한다.  해당하는 값이 없는 경우 기본값을 리턴한다.

using System;
using System.Linq;

class Program
{
    static void Main(string[] args)
    {
        int[] numbers = new int[] { 1, 2, 3, 4, 5 };

        Console.WriteLine(numbers.FirstOrDefault(c => c > 3));
        Console.WriteLine(numbers.FirstOrDefault(c => c > 5)); //기본값 리턴
        Console.ReadKey();
    }
}

결과값 : 
4
0

Enumerable.ToDictionary (TSource, TKey) 메서드

Enumerable을 Dictionary를 만든다.

using System;
using System.Collections.Generic;
using System.Linq;


class People
{
    public string Name { get; set; }
    public int Age { get; set; }

    public override string ToString()
    {
        return string.Format("Name = {0}, Age = {1}", Name, Age);
    }
}
class Program
{
    static void Main(string[] args)
    {
        People[] array = new People[] {
            new People() { Name = "nana kim", Age = 20 },
            new People() { Name = "sena oho", Age = 21 },
            new People() { Name = "koko lee", Age = 20 }
        };

        Dictionary<string, People> dic = array.ToDictionary(p => p.Name);

        foreach (People n in dic.Values)
        {
            Console.WriteLine(n);
        }

        Console.ReadKey();
    }
}


참조)
http://blog.jhashimoto.net/entry/20120309/1331283458
예제로 배우는 C#  http://www.csharpstudy.com/CSharp/CSharp-extension-method2.aspx