c# - 使用linq计算平均值而不分组

标签 c# linq

<分区>

我有一个数据表,其中包含几列。 我想用 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()

当我计算 Sum 时,这非常有效,但平均值会产生第一个记录值,而不是所有记录的平均值。 我认为这是不必要的: .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()

但采用更简单、更清洁的方式。这会正确生成平均值。

最佳答案

Enumerable.Average计算数字序列的平均值。因此,您需要为所需的每个平均值投影(即 Select)一列。

dtPointCollFb.Select(r => r.PLUS100).Average()

dtPointCollFb.Average(r => r.PLUS100)    

GroupBy构建列表列表。在这种情况下,(外部)列表只有一个元素。 (因为您对原始列表中的所有元素任意使用相同的键)

所以你上面的内容可以很容易地写成:

var averages = new
{
    Plus100 = dtPointCollFb.Average(item => item.PLUS100),
    Plus50 = dtPointCollFb.Average(item => item.PLUS50),
    Plus10 = dtPointCollFb.Average(item => item.PLUS10),
    Plus5 = dtPointCollFb.Average(item => item.PLUS5),
    Plus1 = dtPointCollFb.Average(item => item.PLUS1),
    NULLA = dtPointCollFb.Average(item => item.NULLA)
};

做更多的事情需要定制的扩展函数(扩展 IEnumerable<DataTableClass> )。

关于c# - 使用linq计算平均值而不分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16980375/

相关文章:

c# - XmlDocument 不保存字符实体

c# - 如何将可变数量的参数传递给网络服务

c# - ASP :Textbox off focus?

c# - PropertyGrid 控件的默认内置编辑器

c# - CopyToDataTable : Why exactly does it throw an error if one field is NULL, 以及如何修复它?

linq - System.Linq.Dynamic 不适用于 Entity Framework

c# - DNN 检查用户是否在角色组中

c# - LINQ 中的分离联合

c# - 此操作会创建结构不正确的文档

c# - 数组获得的最小值大于其他值