Linq查询:给定行的列的总和

本文关键字:查询 Linq | 更新日期: 2023-09-27 18:25:41

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

我有一个表,其中有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查询,我们将不胜感激。

提前谢谢。

Linq查询:给定行的列的总和

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 };

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

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

它认为这是一个选项,因为您提到的动态特性:

动态LINQ(第1部分:使用LINQ动态查询库)