본문 바로가기

LINQ

(5)
거침없이 배우는 LINQ 원제: Linq in Action저자: Fabrice Marguerie, Steve Eichert, Jim Wooley 어떤 언어에 대해 출판을 할 때, 한 분야에 대해 글을 쓴 다는 것은 그 주제에 대해 깊이 다룬다는 것을 의미한다. 신입사원때에는 DB접속을 구현하는 방법을 몰라서 서점에서 왜 그런 책은 잘 없지 생각을 했는데, 이제는 어느정도 나오는 것 같다. 아직도 C언어로 OLE DB를 COM이라는 것을 통해 구현을 하는 것에 대해 다루는 책은 절판되어 없을 듯. LINQ가 데이터베이스만을 다루기 위한 기술은 아니지만 SQL Server를 닷넷에서 연결을 한다고 한다면, 사용해 볼 만하다.Charpter 18 다양한 계층에서 사용되는 LINQ에서 고전적인 3계층구조(3-tier)를 언급하면서 아키..
DataContext Step by step 백문이 불여일타라고 실제로 DataContext를 이용해서 LINQ를 이용해서 데이터를 조작하는 것을 정리해본다.Visual Studio 2008에 있는 서버 탐색기 > 데이터 연결을 이용해서 ORM을 이용해 보겠다. 1. DB 구성 DB: SQL Server 2008 Standard를 사용합니다. 아래 스크립트로 샘플용 테이블을 생성한다.주의해야 할 점은 테이블에는 기본키(Primary Key)가 꼭 있어야 한다는 것이다.그렇지 않으면 Create, Update, Delete작업시에 아래와 같이 에러가 난다.처리되지 않은 예외: System.InvalidOperationException: 'Table(TableEx)'에 기본 키가 없으므로 Create, Update 또는 Delete 작업을 수행할 수 ..
자주쓰는 LINQ 정리 쿼리식 표현식 using System.Linq; // Where, OrderByDescending DataContext를 이용 System.Data.Linq.DataContext를 상속받아 구현 INSERT - 해당 테이블의 클래스를 생성후 InsertOnSubmit()를 호출, 이후 SubmitChanges()를 호출하여 데이터 변화를 반영시킴.(자동 생성되는 값이 있을 경우에는, 인스턴스에 값을 자동으로 받아옴) UPDATE - 인스턴스의 값을 수정 후에 SubmitChanges()를 호출, 주의해야 할 점은 ChangeConflictException 예외가 발생할 수 있다는 점임. 예외처리를 해줄 필요가 있음. 이후 ResolveAll()을 호출하여 충돌을 해결해야 함. ResolveAll의 인자:..
SQLite in LINQ Community.CsharpSqlite.SQLiteClient는 추상클래스 System.Data.Common.DbConnection를 구현하고 있기 때문에 쉽게 LINQ사용이 가능할 것이라고 생각했다. 아래와 같은 테이블에CREATE TABLE IF NOT EXISTS [MFPUserMap] ( [MapID] INTEGER PRIMARY KEY AUTOINCREMENT, [MFPIP] varchar(50) NOT NULL, [UserName] nvarchar(50) NOT NULL, [MFPUserID] int NOT NULL, [CreatedDate] datetime DEFAULT (datetime('now','localtime'))); 아래와 같은 컨텍스를 구현하는 클래스를 만들고public par..
LINQ 예제 문자열 붙이기 Aggregate와 StringBuilder를 같이 쓰면 성능도 보장하면서 표현도 괜찮아진다. string[] someData = ...string concatedString = someData.Aggregate(new StringBuilder(), (sb, data) => sb.Append(data)).ToString(); 데이터 필터 where 조건에서 걸러내면 된다. &&로 결합하면 이상하게 되니 연달아 쓰길 권장한다. // 0x00 값을 제외하기, 가져올 때는 string 타입으로 가져왔다.byte[] someData = ...var filtered = from byte b in someData where b != 0x00 select Char.ConvertFromUtf32(b);