Linq查询:给定行的列总和

3

我搜索了很多在这里发布的问题,但是我无法找到更好的解决方案来解决我的问题。

我有一张表格,其中有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个回答

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

这是最好/唯一的方法,而不需要深入反射来查找十进制属性类型。

然而,如果您有大量这些“值”列,则可能希望重新设计数据库,将它们移动到相关表中的行中。如果您这样做,那么您可以利用Linq-to-sql的Sum功能。


我希望我能重新设计数据库,但这不在我的职责范围内。 :( - Dilberted

0

我已经多次查看过这个网站,但仍然无法弄清楚它如何简化我的查询。如果你有样例,请给我看一下,那将是非常有帮助的。 - Dilberted

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接