LINQ to Object : LINQ for In-Memory Collections
LINQ를 사용하여 In-Memory Collection 에 대하여 데이터를 다룰 수 있다.
< 예제 >
제네릭 컬렉션 타입으로 사용할 클래스를 정의 한다. Customer 클래스로 다음과 같다.
Customer 클래스 타입을 사용하여 제네릭 컬렉션을 생성한다.
제네릭 컬렉션 객체로 부터 모든 데이터를 읽어서 출력한다.
제네릭 컬렉션 객체 데이터 중에서 City 가 London 인 사람만 출력한다.
< 소스 코드 >
이미지 출처 : FreeM Consulting Group.
http://www.msstudy.co.kr
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 IEnumerableCreateCustomers() { 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