使用Linq让sum计算平均值

时间:2018-01-24 07:41:48

标签: c# linq

如何使用linq let方法计算时差和平均值之和,我尝试下面提到的代码只是返回时差列表。

var query1 = from c in DBCollection.Find(Query_Collection).ToList()
let DtCreateDate = Convert.ToDateTime(c["CreatedDate"]) 
let DtModifiedDate = Convert.ToDateTime(c["LastModifiedDate"]) 
let difference = (DtModifiedDate - DtCreateDate).TotalSeconds select new { difference };

2 个答案:

答案 0 :(得分:0)

通过执行以下操作:

var query1 = from c in DBCollection.Find(Query_Collection).ToList()
                     let DtCreateDate = Convert.ToDateTime(c["CreatedDate"])
                     let DtModifiedDate = Convert.ToDateTime(c["LastModifiedDate"])
                     let difference = (DtModifiedDate - DtCreateDate).TotalSeconds
                     let averageSum = (((DtCreateDate + DtModifiedDate) / 2) + difference) //calculate the average
                     select new { difference, averageSum };

以上,'差异'两个给定日期之间保存在变量差异中 我添加了另一个名为' averageSum'的变量,它现在存储两个日期之间的平均值,然后将差值加到平均值上。

答案 1 :(得分:0)

我没有详细说明你如何计算每一行的平均值,但为了累积自定义值,你可以使用Aggregate方法,如下所示:

var query1 = from c in DBCollection.Find(Query_Collection).ToList()
.Select(e => new {DtCreateDate = Convert.ToDateTime(e["CreatedDate"]), DtModifiedDate = Convert.ToDateTime(e["LastModifiedDate"])})
.Select(e => new {Diff = (e.DtModifiedDate - e.DtCreateDate).TotalSeconds, Av = 0 /* Calculate average for the row */} )
.Aggregate(new {Diff = (double) 0, Av = 0}, (group, cur) => new {Diff = group.Diff + cur.Diff, Av = group.Av + cur.Av});

该陈述的结果是一个单一的对象,它对整个列表中的差异和平均值进行总和