【发布时间】:2013-06-07 18:06:12
【问题描述】:
我有一个数据表,其中包含几列。 我想用 linq 计算这些的平均值,而不分组: 我试过这个:
dtPointCollFb.GroupBy(r => 1).Select(r => new
{
Plus100 = r.Average(item => item.PLUS100),
Plus50 = r.Average(item => item.PLUS50),
Plus10 = r.Average(item => item.PLUS10),
Plus5 = r.Average(item => item.PLUS5),
Plus1 = r.Average(item => item.PLUS1),
NULLA = r.Average(item => item.NULLA)
}).ToList()
当我计算总和时,这非常有效,但平均产生第一条记录值,而不是所有记录的平均值。 我认为这是不必要的: .GroupBy(r => 1) 因为我用常量分组。
但如果没有这个,我不能只对整个查询使用平均值,并且只能用于一列:
dtPointCollFb.Average(r => r.PLUS100)
那么有人可以提出一个简单的最佳实践解决方案吗? 如果可以使用方法语法,则不要查询。
我想要这样的东西:
dtPointCollFb.GroupBy(r => 0).Select(r => new
{
Plus100 = r.Sum(item => item.PLUS100) / dtPointCollFb.Rows.Count,
Plus50 = r.Sum(item => item.PLUS50) / dtPointCollFb.Rows.Count,
Plus10 = r.Sum(item => item.PLUS10) / dtPointCollFb.Rows.Count,
Plus5 = r.Sum(item => item.PLUS5) / dtPointCollFb.Rows.Count,
Plus1 = r.Sum(item => item.PLUS1) / dtPointCollFb.Rows.Count,
NULLA = r.Sum(item => item.NULLA) / dtPointCollFb.Rows.Count
}).ToList()
但使用更简单、更清洁的方式。这会正确地产生平均值。
【问题讨论】:
-
不一样,但有建议分别计算平均值。
-
仅作记录,我相信
GroupBy构造旨在强制在一次往返数据库中计算所有平均值。 -
是的,你是对的,这将是最好的方法,因为我从 sql server 传输了很多数据。此模式旨在使用 linq 在 Web 服务器上进行多重聚合。我从同一个数据集合中计算出不同的东西。我可以在 5 个不同的 sql 查询中做到这一点。我不知道,也许会更好。