안녕하세요 삽잡이입니다.
몇일 전부터 ADO.NET에 대해서 알아보고 있습니다.
이번 시간에는 ADO.NET의 마지막으로써
비 연결 계층에서 LINQ를 사용하는 기능에 대해서 알아보려고 합니다.
LINQ 문법은 쿼리 문법으로써
SQL과 마찬가지로 많은 데이터를 대상으로 때립니다.
이전에는 객체들인 objects 형식에 때렸던 것이었습니다.
그런데 ADO.NET에서 보셨으면 아시겠지만,
DataSet을 대상으로도 LINQ가 가능하다는 놀라운 사실을 알 수 있습니다.
지금까지 데이터를 조작하는 방법은 총 세가지였습니다.
1. Tables, Rows, Colums 컬렉션을 사용.
2. DataReader 객체를 사용.
3. 강력한 타입의 데이터 클래스를 사용.
그리고 이번에 알아볼 LINQ까지 합치면 이제는 총 네가지이군요.
LINQ는 IEnumerable<T> 형식을 구현한 객체를 대상으로 때릴 수 있습니다.
그런데 DataTable은 해당 인터페이스를 구현하지 않았습니다.
따라서, AsEnumerable() 라는 확장 메서드를 통해서
IEnumerable<T>를 구현한 객체처럼 Wrapping 한 객체를 반환해줍니다.
또한, select new를 통해 새로운 속성을 갖는 집합을 만들어줍니다.
그런데, 잘보시면 Filed<T> 확장 메서드가 있습니다.
이전에는, DataRow의 인덱서를 사용하여
결과 집합을 만들게 될 때 잘못된 접근을 하게 되면,
런타임시간에 예외가 발생했었습니다.
즉, 실행하기 전까지는 타입이 문자열로 되어있기 때문에 참인지 거짓인지 모른다 이겁니다.
하지만, Filed<T> 확장 메서드를 사용하게 되면 컴파일 타임때 인식할 수 있게 됩니다.
즉, 확장 제네릭 메서드를 사용하여,
컴파일 시간때 해당 필드가 있는지 없는지를 검사할 수 있다 이거죠.
LINQ 명령을 통해 결과 집합을 받을 때에도 역시,
IEumerable<T> 인터페이스를 구현한 객체에 받을 수 있습니다.
즉, LINQ 결과로 알 수 있는 것은
IEnumerable<T> 형을 구현한 객체라는 것 밖에 없다는 것이죠.
DataTable을 대상으로 LINQ를 때리고자 확장 메서들르 사용했었습니다.
따라서, 결과 집합은 원상태로 되돌려야겠지요.
CopyToDataTable<T> 확장 메서드를 통해
다시 원상태로 변환해줄 수 있습니다.
이번 시간은 여기까지 하도록 하겠습니다.
이상 삽잡이였습니다!
<참고 : C# and the .NET4 Platform>
'삽질의 현장 > - .NET' 카테고리의 다른 글
#097_닷넷(.NET)_ WinForm - WinForm 기초 및 Event (0) | 2015.11.21 |
---|---|
#096_닷넷(.NET)_ WinForm - WinForm Intro (0) | 2015.11.21 |
#094_닷넷(.NET)_ ADO.NET - 비연결 계층 자동화 (0) | 2015.11.21 |
[삽잡이::C#] ADO.NET_View (0) | 2015.11.20 |
#093_닷넷(.NET)_ ADO.NET - 비연결 계층 코드 (0) | 2015.11.20 |