Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中的对象列表上按平均值分组#_C# - Fatal编程技术网

C# 在C中的对象列表上按平均值分组#

C# 在C中的对象列表上按平均值分组#,c#,C#,我有一个对象列表,对象如下所示 public class Sample { public DateTime _dt; public decimal _d; public decimal_value; } 我想要一个列表,按日期的年和月以及平均值的d值分组 所以,如果一月的话,这个列表已经 one set of 31 values with _d =1, one set of 31 values with _d =5 样本的结果列表将有两个值 1/1/2016 ,_d

我有一个对象列表,对象如下所示

public class Sample
{
    public DateTime _dt;
    public decimal _d;
    public decimal_value;
}
我想要一个列表,按日期的年和月以及平均值的d值分组

所以,如果一月的话,这个列表已经

one set of 31 values with _d =1, 
one set of 31 values with _d =5
样本的结果列表将有两个值

1/1/2016 ,_d = 1 and average of _value
1/1/2016 ,_d = 5 and average of _value

首先,我们必须重新定义
示例

public class Sample
{
    public DateTime _dt   { get; set; }
    public decimal _d     { get; set; }
    public decimal _value { get; set; }
}
如果我们有一个名为
samples
samples
对象列表,那么类似这样的东西会满足您的需要:

var results = samples.GroupBy(sample => { Year = _dt.Year, Month = _dt.Month DValue = _d})
                     .Select(gr => new {
                         Year = gr.Key.Year,
                         Month = gr.Key.Month,
                         DValue = gr.Key.DValue,
                         AverageValue = gr.Select(item => item.Value).Average()
                     });
这似乎有效:

var results = samples
    .GroupBy(g => new { 
        Year = g._dt.Year, 
        Month = g._dt.Month, 
        _d = g._d })
    .Select(s => new { 
        Year = s.Key.Year, 
        Month = s.Key.Month, 
        _d = s.Key._d, 
        Avg = s.Average(a => a._value) });
为了更好,我将修改您的属性命名约定,以选择样式和名称。公共属性应该是Pascal大小写的,它们的名称应该更具描述性,特别是当您不打算为类提供摘要元数据时。例如:

public class Sample
{
    /// <summary>
    /// Gets or sets the sample's date
    /// </summary>
    public DateTime Date
    {
        get;
        set;
    }

    /// <summary>
    /// Gets or sets the sample's index
    /// </summary>
    public decimal Index
    {
        get;
        set;
    }

    /// <summary>
    /// Gets or sets the sample's value
    /// </summary>
    public decimal Value
    {
        get;
        set;
    }
公共类示例
{
/// 
///获取或设置样本的日期
/// 
公共日期时间日期
{
得到;
设置
}
/// 
///获取或设置样本的索引
/// 
公共十进制索引
{
得到;
设置
}
/// 
///获取或设置样本的值
/// 
公共十进制值
{
得到;
设置
}
我已将名称“_dt”、“_d”和“_value”分别转换为“日期”、“索引”和“值”


带驼峰大小写的下划线样式(例如“_descriptivePropertyName”)通常保留给类中的私有字段,以及其他情况。

编辑为公共。尝试找出linq方式,而不是运行循环并根据列表中的第一个实例查询月/年的剩余可用天数。