我有一个对象列表,其中对象如下所示
public class Sample
{
public DateTime _dt;
public decimal _d;
public decimal_value;
}
我想要一个按日期和月份分组的列表和_d值平均值的_d值。
因此,如果是1月,则列表
one set of 31 values with _d =1,
one set of 31 values with _d =5
Sample的结果列表将有两个值
1/1/2016 ,_d = 1 and average of _value
1/1/2016 ,_d = 5 and average of _value
答案 0 :(得分:0)
最初我们必须重新定义Sample
类。
public class Sample
{
public DateTime _dt { get; set; }
public decimal _d { get; set; }
public decimal _value { get; set; }
}
如果我们有一个名为Sample
的{{1}}个对象列表,那么你想做的就是这样:
samples
答案 1 :(得分:0)
这似乎有效:
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 Case,它们的名称应该更具描述性,特别是如果您不打算向您的类提供摘要元数据。例如:
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”分别转换为“Date”,“Index”和“Value”。
Camel Case的样式下划线(例如“_descriptivePropertyName”)通常保留给类中的私有字段,以及其他情况。