LINQ to Object : LINQ for In-Memory Collections






LINQ를 사용하여 In-Memory Collection 에 대하여 데이터를 다룰 수 있다.






< 예제 >

제네릭 컬렉션 타입으로 사용할 클래스를 정의 한다. Customer 클래스로 다음과 같다.
namespace LINQOverView
{
    public class Customer
    {
        public string CustomerID { get; set; }
        public string City { get; set; }

        public override string ToString()
        {
            return CustomerID + "\t" + City;
        }
    }
}


Customer 클래스 타입을 사용하여 제네릭 컬렉션을 생성한다.
public IEnumerable CreateCustomers()
{
    return new List
    {
        new Customer { CustomerID = "ALFKI", City = "Berlin"    },
        new Customer { CustomerID = "BONAP", City = "Marseille" },
        new Customer { CustomerID = "CONSH", City = "London"    },
        new Customer { CustomerID = "EASTC", City = "London"    },
        new Customer { CustomerID = "FRANS", City = "Torino"    },
        new Customer { CustomerID = "LONEP", City = "Portland"  },
        new Customer { CustomerID = "NORTS", City = "London"    },
        new Customer { CustomerID = "THEBI", City = "Portland"  }
    };
}



제네릭 컬렉션 객체로 부터 모든 데이터를 읽어서 출력한다.
var results = CreateCustomers();
dataGridView1.DataSource = results.ToList();







제네릭 컬렉션 객체 데이터 중에서 City 가 London 인 사람만 출력한다.
var results = from c in CreateCustomers()
                   where c.City == "London"
                   select c;

dataGridView1.DataSource = results.ToList();






< About >
우선 관리할 데이터 정보를 담고 있는 클래스를 만들었다. 고객의 ID와  사는 도시 정보를 담고 있는  Customer 클래스 이다. 나중에 출력용으로 ToString 메소드를 재정의 하여 고객의 ID 와 도시 정보를 string 으로 출력하게 하였다.

Main 함수에서 ObjectQuery 메소드를 호출하게 되는데, ObjectQuery 메소드는 객체(즉, Collection)를 쿼리하는 메소드 이다. CreateCustomers 메소드는 고객들 각각을 Customer 객체로 생성하고, List<Customer> 제네릭 컬렉션에 담아 리턴한다. 여기서 유용하게 쓰인 문법은 "컬렉션 Initializer" 이다. 제네릭 컬렉션은 모두 IEnumerable<>를 상속받으로로 IEnumerable<> 타입으로 리턴하였다.

사용된 LINQ는 select 문으로 CreateCustomers 메소드가 리턴한 컬렉션에 대하여 도시 정보가 "London" 인 정보만 컬렉션으로 뽑았다. 뽑은 컬렉션을 순환하여 출력 하였다.
순환문은 다음과 같이 작성하여도 된다.

IEnumerator ie =  ht.Values.GetEnumerator();
while(ie.MoveNext())
{
    Button b = (Button)ie.Current;
    b.BackColor = Color.Blue;
}



< 소스 코드 >








이미지 출처 : FreeM Consulting Group.
http://www.msstudy.co.kr
Posted by six605
,