2012-02-23 2 views
3

여기에 게시 된 많은 질문을 검색했지만 내 문제에 대해 더 나은 솔루션을 찾을 수 없습니다.Linq 쿼리 : 주어진 행에 대한 열의 합

십진수 값을 저장하는 6 개의 열이있는 테이블이 있고 쿼리의 모든 열을 합산하려고합니다. 현재 이것은 내가하고있는 일이다.

(from i in db.OperationalValues 
where i.Timestamp == date 
select new 
{ 
    CumulativeValues = i.Value1.GetValueOrDefault(0) 
          + i.Value2.GetValueOrDefault(0) 
          + i.Value3.GetValueOrDefault(0) 
          + i.Value4.GetValueOrDefault(0) 
          + i.Value5.GetValueOrDefault(0) 
          + i.Value6.GetValueOrDefault(0), 
}).FirstOrDefault(); 

많은 질문과 답변을 보았지만이 LINQ 쿼리를 작성하는 좋은 방법을 찾고 싶습니다. 테이블에 더 많은 열이있을 수 있고 열의 수가 증가하면 쿼리가 커집니다.

누구든지이 LINQ 쿼리를 작성하는 더 좋은 방법이 있다면 매우 높이 평가할 것입니다.

미리 감사드립니다.

답변

0

이는 십진수 속성 유형을 찾기 위해 리플렉션을 탐색하지 않고 진행하는 가장 좋은 방법입니다.

그러나 이러한 "값"열이 많은 경우 데이터베이스를 다시 디자인하여 관련 테이블의 행으로 옮길 수 있습니다. 그렇게했다면 Linq-to-SQL의 Sum 기능을 사용할 수 있습니다.

+0

나는 데이터베이스를 재 설계 싶지만, 나의 범위에. : ( – Dilberted

0

이것이 당신 때문에 당신이 언급 동적 특성이 옵션이 생각 :

Dynamic LINQ (Part 1: Using the LINQ Dynamic Query Library)

+0

나는 많은 시간이 웹 사이트를 보았지만 여전히 내 쿼리를 단순화 할 수있는 방법을 알아낼 수 없습니다. 만약 당신이 샘플을 가지고 있다면 큰 도움이 될 것입니다. – Dilberted

1
var result = new { CumulativeValues = 0 }; 
var item = db.OperationalValues.FirstOrDefault(i => i.Timestamp == date); 
if (item != null) 
    result = new { CumulativeValues = item.Value1 ?? 0 + item.Value2 ?? 0 + item.Value3 ?? 0 + item.Value4 ?? 0 + item.Value5 ?? 0 + item.Value6 ?? 0 }; 
+0

조금 깨끗해 보인다 :) – Dilberted