Linq不分组求多列的和

我们需要写Linq查询语句,使用let来创建一个新的变量

Let 关键字

“let”关键字在查询语法中很有用。它会投影一个新的范围变量,允许重新使用表达式并使查询更具可读性。

例如: 这里需要写,两遍   let可以看成在查询语法里面申明一个变量。

 

 

方法:

/// <summary>
        /// 监控数据
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        public async Task<IHttpActionResult> JkDataAsync()
        {
            try
            {
                int day = DateTime.Now.Day;       
                IList<RbBgdata> result = await dbOracle.RbBgdatas.AsQueryable().Where(x => x.Createtime.Value.Day == day).ToListAsync();
                var ii = (from x in result
                          let Partakenum = result.Sum(ee => ee.Partakenum)
                          let Unpartakenum = result.Sum(ee => ee.Unpartakenum)
                          let Qualifiednum = result.Sum(ee => ee.Qualifiednum)
                          let Unqualifiednum = result.Sum(ee => ee.Unqualifiednum)
                          select new
                          {
                              PartakenSum = Partakenum,   //参与用户
                              UnpartakeSum = Unpartakenum, //总用户
                              QualifiedSum = Qualifiednum, //合格数
                              UnqualifiedSum = Unqualifiednum //不合格数
                          }
                                       ).FirstOrDefault();

                object obj = new
                {
                    PartakeNum = ii.PartakenSum,
                    UnPartakeNum = ii.UnpartakeSum - ii.PartakenSum,
                    TotalPartakNum = ii.UnpartakeSum,
                    Cyl = (ii.UnpartakeSum == 0 ? 0 : Math.Round((ii.PartakenSum.Value * 1.0 / ii.UnpartakeSum.Value) * 100, 2)) + "%",
                    QualifiedNum = ii.QualifiedSum,//合格数
                    UnQualifiedNum = ii.UnqualifiedSum,
                    Zql = ((ii.QualifiedSum + ii.UnqualifiedSum) == 0 ? 0 : Math.Round((ii.QualifiedSum.Value * 1.0 / (ii.QualifiedSum.Value + ii.UnqualifiedSum.Value)) * 100, 2)) + "%"
                };
                return await Task.FromResult(Ok(new { errcode = 0, data = obj }));
            }
            catch (Exception ex)
            {
                return await Task.FromResult(Ok(new { errcode = 0, errmsg = ex.Message }));
            }
        }

 

posted @ 2019-02-28 15:55  Sealee  阅读(499)  评论(0编辑  收藏  举报