재우니의 블로그



이번에 보여줄 내용은 단순한 LINQ 쿼리 구문이 아니라 확장성과 패턴상 이런 방법으로도 구현할 수 있다는 것을 보여주고자 이렇게 글을 씁니다.


먼저 간단한 성, 이름, 그리고 호칭에 대한 클래스안에 프로퍼티를  만들어 보겠습니다.


public class Name : IName

{

        // 성

public string FirstName

{

get;

set;

}

        

        //이름

public string LastName

{

get;

set;

}


        //호칭

public string Prefix

{

get;

set;

}

}


위의 코드를 보면 IName 의 인터페이스를 사용했습니다. 그럼 인터페이스는 어떻게 구현되어 있는지 확인해 보죠.


public interface IName

{

string FirstName{get;set;}

string LastName { get; set; }

string Prefix { get; set; }

}


위와 같이 인터페이스를 구현하고, 이를 Name 클래스에 상속을 받아 인터페이스에 정의한 프로퍼티에 맞게 클래스를 구현하시면 되겠습니다.


이제... 위의 Name 클래스를 가지고 제네릭에 값을 할당하는 메소드를 구현하겠습니다.


        private List<INameGetNames()

{

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


list.Add(new Name

{

FirstName = "심",

LastName = "재운",

Prefix = "Mr."

});


list.Add(new Name

{

FirstName = "한",

LastName = "성은",

Prefix = "Ms"

});


return list;

}


해당 GetName 메소드를 호출하면 List 제네릭으로 값을 반환해 주며, new Name {} 이런 구문으로 해당 프로퍼티에 값을 할당하여 객체를 Add 함수로 추가했습니다. 두명의 이름을 기재하였으며, 코드 중에 List<IName> list = new List<IName>() 의 인스턴스 생성하는 구문에서 IName 의 인터페이스를 사용하는 부분을 보실 수 있습니다. 이를 클래스로 구현하지 않고 인터페이스로 처리 한 부분입니다.


이제 담은 List 제네릭값을 가져오는 구문 중에 이를 LINQ 로 구현해 보죠.


List<IName> list = GetNames();


List<IName> MenList = (from men in list

where men.Prefix == "Mr"

select (IName)

(new Name { FirstName = men.FirstName, LastName = men.LastName, Prefix = men.Prefix })

).ToList();


GetName() 의 제네릭 메소드를 호출하여 값을 변수에 담고, 이를 LINQ 구문으로 검색 쿼리하는 부분을 보실 수 있습니다.

where 키워드는 조건문을 말하며, Prefix 에 Mr 라는 값을 가지고 있는 사용자를 가져오도록 하였고, 인터페이스로 형변환하여 값을 담았습니다. ToList(), ToArray()와 같은 확장 매서드를 사용하면 데이터의 타입을 변경하는 동시에 즉시 데이터베이스와 통신을 하여 값을 받아 올 수 있습니다.


이를 곧바로 ListView 컨트롤에 바인딩을 곧바로 사용할 수 있습니다. 


ListView.DataSource = MenList; 

ListView.DataBind();




http://cafe.daum.net/aspdotnet/VY7/193


감사합니다. - POSTED BY 심재운