使用 group by 从一个包含批量记录的表中获取一些统计数据并将结果放入第二个表中

Posted

技术标签:

【中文标题】使用 group by 从一个包含批量记录的表中获取一些统计数据并将结果放入第二个表中【英文标题】:using group by for getting some statistic data from one table with bulk records and puting the results into the second table 【发布时间】:2021-08-29 00:58:59 【问题描述】:

正如我在标题中解释的那样,我有 2 个表: 1 - 在 20 年内为大约 50 人提供 21000 片叶子的“叶子” 2-“StatisticLeave”为空 现在我想使用 group by 从表 1 中获取一些统计数据,并在进行一些计算(如 sum & ...)之后将结果放入第二个表中。 我写了下面的代码:

public ActionResult UserStatistic()
    
        
        var ST = new List<StatisticLeave>();
        var resuls = db.Leaves.GroupBy(p => p.Pcode);
        foreach (var Pcode in resuls)
        
            var statistic = new StatisticLeave();
            foreach (var item in Pcode)
             
                var used = UsedLeaves(item.Pcode);
                var estelaji = db.Leaves.Where(p => p.DLT == Leave.DLType.Estelaji).Sum(p => p.LeaveDays);
                var bh = db.Leaves.Where(p => p.DLT == Leave.DLType.Bihoghoogh).Sum(p => p.LeaveDays);               
                statistic.Yearlyhours = ViewBag.mins/60;
                statistic.YearlyDays = ViewBag.days;
                statistic.YearEstelaji = estelaji;
                statistic.YearBihoghoogh = bh;
                statistic.Pcode = item.Pcode;
                statistic.Year = item.HijriYear;
                statistic.UsedYearLaeve = (used / 60) / 8;
                ST.Add(statistic);
            
            db.StatisticLeave.AddRange(ST);
        
        db.SaveChanges();
        return View();
    

当我跟踪代码时,我得到以下警告:

"System.InvalidOperationException H结果=0x80131509 Message=无法翻译给定的“GroupBy”模式。在 'GroupBy' 之前调用 'AsEnumerable' 以在客户端对其进行评估。”

请您告诉我问题出在哪里或如何解决。

【问题讨论】:

您是否阅读了异常消息中的建议? 【参考方案1】:

我修改了我的代码如下,问题解决了

   public ActionResult UserStatistic(Int32? PCode)
    
        
        var ST = new List<StatisticLeave>();
        var results = db.Leaves.Where(p => p.Pcode == PCode).ToLookup(p => p.HijriYear);
        foreach (var HijriYear in results)
        
            var statistic = new StatisticLeave();
           
            foreach (var item in HijriYear)
            
                var used = UsedLeaves(item.Pcode, item.HijriYear);
                var estelaji = db.Leaves.Where(x => x.Pcode == item.Pcode).Where(p => p.DLT == Leave.DLType.Estelaji).Where(p => p.HijriYear == item.HijriYear).Sum(p => p.LeaveDays);
                var bh = db.Leaves.Where(x => x.Pcode == item.Pcode).Where(p => p.DLT == Leave.DLType.Bihoghoogh).Where(p => p.HijriYear == item.HijriYear).Sum(p => p.LeaveDays);                  
                statistic.Yearlyhours = ViewBag.mins / 60;
                statistic.YearlyDays = ViewBag.days;
                statistic.YearEstelaji = estelaji;
                statistic.YearBihoghoogh = bh;
                statistic.Pcode = item.Pcode;
                statistic.Year = item.HijriYear;
                statistic.UsedYearLaeve = (used / 60) / 8;
                ST.Add(statistic);
            
            db.StatisticLeave.AddRange(ST);
        
        db.SaveChanges();
        return View();
    

【讨论】:

以上是关于使用 group by 从一个包含批量记录的表中获取一些统计数据并将结果放入第二个表中的主要内容,如果未能解决你的问题,请参考以下文章

使用 GROUP BY 时如何将列数据值相加

与 GROUP BY 结合的第一条记录

使用 GROUP BY,选择每个组中 ID 最低的记录 ID

JPA标准GROUP BY子句

Group by 没有给我最新的组

Group by 包含非聚合列