我搜索了很多问题,但是我找不到更好的解决方案。
我有一个包含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 :(得分: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)
由于您提到的动态特性,它认为这是您的选择: