이번에 보여줄 내용은 단순한 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<IName> GetNames()
{
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 심재운