如何解决使用 group by 从一个带有批量记录的表中获取一些统计数据并将结果放入第二个表中
正如我在标题中所解释的,我有 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 HResult=0x80131509 Message=无法翻译给定的“GroupBy”模式。在“GroupBy”之前调用“AsEnumerable”以在客户端对其进行评估。”
请告诉我问题出在哪里或我该如何解决。
解决方法
我改变了我的代码如下,问题解决了
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();
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。