目前我收集了一些“访问”#39;类。 Visit类有许多属性,但这里是我的问题的相关属性:
public class Visit
{
public int Id { get; set; }
public DateTime VisitDate { get; set; }
public int VisitDuration { get; set; }
// Other irrelevant properties...
}
我还创建了一个名为' VisitDuration':
的新课程public class VisitDuration
{
public DateTime VisitDate { get; set; }
public int Duration { get; set; }
{
我有一个函数可以获取两个日期之间的访问集合,如下所示:
var visits = GetVisitsCollection();
我想要做的是通过VisitDate对访问进行分组,然后创建一个新的VisitDuration类实例,该实例应包含该日期的VisitDate和平均访问持续时间。
例如,如果在2014年11月28日发生了3次访问,持续时间分别为20,40和60次,我希望使用VisitDate创建一个新的VisitDuration实例:28 / 2014年11月和持续时间:40(3的平均值)。我怎么能用linq做到这一点?
我使用使用GroupBy的计数做了类似的事情,即:
var collection = visits.GroupBy(v => v.VisitDate).Select(x => new
{
VisitDate = x.Key.ToString(),
Count = x.Count()
});
但区别在于不是计算,我希望获得的值是具有该VisitDate的所有记录的属性的平均值。
我希望我能够很好地解释自己并感谢任何回复!感谢
答案 0 :(得分:2)
试试这个: -
var collection = visits.GroupBy(x => x.VisitDate)
.Select(x => new VisitDuration
{
VisitDate = x.Key,
Duration = Convert.ToInt32(x.Average(z => z.VisitDuration))
});
工作Fiddle。