재우니의 블로그

이태원 참사에 대한 깊은 애도를 표합니다. 티스토리측에서도 공지했듯 이태원 참사 관련으로 콘텐츠를 생산하는분이 없기를 바랍니다.

반응형


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

반응형

댓글

비밀글모드