내가 만든 DataTable에서 kind 컬럼에는 암과 임파선 두 가지 범주가 있다. 

정상 범주 분류 시에 예외 처리를 주기 위해 DataTable에 kind가 암인 컬럼이 하나라도 있으면 저장할 수 없도록 오류 메세지를 띄워야 사용자가 실수했을 때도 잘못된 데이터의 저장을 막을 수 있다. 

 

이 프로그램 만들면서 깨달은 점은...... 사용자의 요구사항을 들어주면 들어줄수록 사용자 친화적으로 개발을 하는 게 정말 중요하다는 생각이 들었고, 생각보다 사용자는 컴퓨터를 모른다는 것이었고, 사용자는 갓난아기라는 것을 머리에 박고 개발을 해야 한다는 것이었다. 이걸 몰라? 이걸 이렇게 한다고? 라고 생각하는 순간 나도 스트레스받고 사용자도 스트레스받는다. 나는 이 프로그램을 개발한 사람이니까 하던 대로 행동을 하지만 이 프로그램을 처음 본 사람은 어떻게 사용하는지 어디로 튀는지 미지수다. 그러면서 오류도 발견하고 보완해야 할 사항도 보이는 거니까...... 그래서 모든 방면에 예외처리를 꼼꼼하게 하고, 매뉴얼도 적으면서 진행하고 있다. 이 프로그램이 잘 만든 건 아니라는 건 나도 알다마는 그래도 기본은 해야 하니까. 원래 이거 회고에 적으려고 했는데 까먹을 것 같아서 생각나는 김에 적는다. 이만 각설하고 

 

 

DataTable chkInfo = info.readDT();
string kind = "암";

bool contains = chkInfo.AsEnumerable().Any(row => kind == row.Field<String>("Kind"));

 

간단하다. 체크해야 할 DataTable이 나는 다른 클래스에 있어서 원본 DataTable을 변수에 담아 주고 Linq를 이용해서 Kind 컬럼의 행을 모두 스캔한다. 

저 방법 말고 select 라는 함수를 사용하는 것도 있는데 select 함수를 사용하면 성능도 좀 느리고 컴파일할 때 문자열로 인식하기 때문에 별로 사용하지는 않고 있다. 그리고 코드도 별로 안 예쁜 것 같고...... 

AsEnumerable 메서드는 Linq 쿼리로 동작한다. C#에서 좋은 점은 Linq가 지원된다는 것인데 얘는 직접 쿼리로 만들어서 읽어서 하나하나 처리하는 게 아니라 내부 동작으로 빠르게 처리한다. 

데이터의 양이 많을 때는 무조건 Linq 함수로 개발하는 것이 좋다.

'Develop > C#' 카테고리의 다른 글

C# winform 동적으로 탭 추가하기  (0) 2022.05.09
npgsql timeoutException  (1) 2021.07.29