Linq Query:给定行的列总和

时间:2012-02-23 01:32:30

标签: c# .net database linq linq-to-sql

我搜索了很多问题,但是我找不到更好的解决方案。

我有一个包含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查询,我们将非常感激。

提前致谢。

3 个答案:

答案 0 :(得分: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 };

答案 1 :(得分:0)

这是最好的/唯一的方法,可以不去深入研究寻找十进制属性类型。

但是,如果您有这些“值”列的负载,那么您可能需要重新设计数据库以将它们移动到相关表中的行中。如果你这样做,那么你可以使用Linq-to-sql的Sum功能。

答案 2 :(得分:0)

由于您提到的动态特性,它认为这是您的选择:

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