2012-02-23 79 views
3

我搜索了很多發佈在這裏的問題,但是我無法爲我的問題找到更好的解決方案。Linq Query:給定行的列總和

我有一個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 2012-02-23 01:59:18

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 2012-02-23 02:02:05