안녕하세요. LINQ 관련 질문 드리려 이렇게 글을 씁니다.
분명 되게 기초적인 질문 일탠데… 수양이 부족해서 헤매고 있네요.
조금만 도와주시면 감사하겠습니다.
[상황 설명]
DataTable dt가 있습니다.
dt는 A_Money B_Money C_Money A_Name B_Name C_Name 란 6개의 컬럼을 가지고 있습니다.
간단히 테이블로 표현하자면 아래와 같은 구조일 것 입니다.
A_Money B_Money C_Money A_Name B_Name C_Name
123 123 321 "Kim1" "Bob1" "Jan1"
123 123 321 "Kim2" "Bob2" "Jan2"
123 123 321 "Kim3" "Bob3" "Jan3"
123 123 321 "Kim4" "Bob4" "Jan4"
... ... ... ... ... ...
목표는 Money로 끝나는 컬럼들의 합계를 구하는 것입니다. 이를 코드로 표현하면 아래와 같습니다.
var moneySum = dt.AsEnumerable()
.Sum(d =>
d.Field<double>("A_Money")
+ d.Field<double>("B_Money")
+ d.Field<double>("C_Money")
);
이런 결과를 기대합니다.
567
567
567
[질문]
저 moneySum 코드의 문제는 A_Money, B_Money, C_Money … @_Money 컬럼이 늘어날 때 마다 직접 코드를 추가해야 한다는 점입니다. 이에 컬럼명이 Money로 끝나는 데이터만 Select해서 Sum 하려 하는데 여기서 헤매고 있습니다.
string columnName = "Money";
var moneySum = dt.AsEnumerable()
.Where(x=> dt.Columns.Contains(columnName))
.Sum(d =>
d.Field<double>("A_Money")
+ d.Field<double>("B_Money")
+ d.Field<double>("C_Money")
);
이렇게 Where절에 Contains 함수로 호출하면 dt에 "Money"란 컬럼이 있는가 여부로 dt 전체를 반환하기에 아무런 의미가 없었습니다.
짱구를 굴려 여기저기 검색을 해봐도 답을 찾기 어렵네요…