使用LINQ构建新集合

时间:2014-11-28 11:12:54

标签: c# .net linq

目前我收集了一些“访问”#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的所有记录的属性的平均值。

我希望我能够很好地解释自己并感谢任何回复!感谢

1 个答案:

答案 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